【问题标题】:ActivityTestRule - how to call code before Application's onCreateActivityTestRule - 如何在 Application 的 onCreate 之前调用代码
【发布时间】:2015-07-15 03:57:53
【问题描述】:

我正在使用带有 ActivityTestRule 的 Espresso 2.1,并且我正在寻找一种方法来在我的应用程序中调用 onCreate() 之前设置一些静态标志。

我有一些我不想在仪器测试期间调用的初始化代码。

【问题讨论】:

  • static { ... } 块怎么样?
  • 我试过了。不幸的是,仪器测试中的任何代码都将在创建应用程序实例后调用。也许有一种方法可以测试应用程序是否在仪器中运行?
  • 我有点不清楚你在说什么,你能发布你的代码吗?

标签: android unit-testing integration-testing android-espresso


【解决方案1】:

应用程序 onCreate() 在 Instrumentation onCreate() 之后调用。对于这种情况,您需要实现一个自定义测试运行程序,它将继承 AndroidJUnitRunner 并使用您的自定义设置覆盖 callApplicationOnCreate()。

public class MyCustomTestRunner extends AndroidJUnitRunner {
@Override
public void callApplicationOnCreate(Application app) {
    InstrumentationRegistry.getTargetContext().getSharedPreferences().doMyStuff();
    super.callApplicationOnCreate(app);
}
}

确保更新 build.gradle 中的 defaultConfig 以使用新的 testInstrumentationRunner,如下所示:

testInstrumentationRunner "com.myapp.MyCustomTestRunner"

如果您希望在 Activity onCreate() 之前运行一些代码,请将 ActivityTestRule 子类化为您自己的 beforeActivityLaunched() 实现

【讨论】:

  • 这不适用于 Junit 4 测试。你在使用 AndroidJUnit4 时有什么运气吗?
  • 这是用于 junit4 测试的。我认为您正在混合两件事-班级跑步者和instrumentation runner。类运行器保持不变(AndroidJUnit4),而您的检测运行器是自定义运行器。这实际上很有趣——我完全忘记用 @runwith 注释一些类,它似乎没有影响任何东西。我不确定你是否还需要它,除非你正在进行一些定制。
  • 谢谢,这很有帮助。但是,我现在遇到一个错误,我收到错误“测试运行失败:无法找到仪器信息:ComponentInfo{com.mypackage.test/android.support.test.runner.AndroidJUnitRunner}”。如何在 build.gradle 中正确设置 testInstrumentationRunner?再次感谢。
  • 哦,这个在你的应用程序 gradle 文件的android { defaultConfig { testInstrumentationRunner "com.myapp.MyCustomTestRunner" }} 中。确保同时更新 IDE 中的运行配置。如果您使用的是 android studio,它位于“Specific Instrumentation Runner”中。
  • 这个跑步者可以只做一些测试吗?
【解决方案2】:

我通过在我的测试方法中添加这个在 Kotlin 中解决了这个问题:

val scenario = ActivityScenario.launch(MyActivity::class.java)

然后在该调用之前或在您的 @Before 方法中添加/更新您的变量。

【讨论】:

  • 这不起作用。使用仅包含行 val x = 5 的完全空测试,在该处和 Application::onCreate 处添加断点。您会看到首先调用了 onCreate。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多