【问题标题】:Robolectric Testing activity with dagger2使用 dagger2 进行 Robolectric 测试活动
【发布时间】:2018-02-03 12:19:30
【问题描述】:

我有一个扩展 DaggerAppCompatActivity 的活动,以便使用新的 dagger android 注入工具对其进行注入

我正在尝试使用 Robolectric 测试此活动,但测试失败

java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector

如何禁用 dagger 2 注入以将活动测试为正常活动

测试代码

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
public class RegisterActivityTest {

    AppCompatActivity activity;

    @Before
    public void setupActivity() {
        activity = Robolectric.setupActivity(RegisterActivity.class);
    }

    @Test
    public void clickingNewAccountText_MakeNewAccountShouldBeVisible() {
        TextView registerNewAccountTextView = activity.findViewById(R.id.register_sign_up_textView);
        registerNewAccountTextView.performClick();

        Button registerNewAccountButton = activity.findViewById(R.id.register_sign_up_button);
        assertThat(registerNewAccountButton.getVisibility(), is(View.VISIBLE));
    }

}

知道如何解决这个问题

【问题讨论】:

  • 您找到解决方案了吗?我正在寻找类似的东西。
  • @IgorGanapolsky 很遗憾没有:(如果您找到了解决方案,请告诉我

标签: android unit-testing tdd dagger-2 robolectric


【解决方案1】:

我之前也遇到过类似的问题。您发布的错误似乎表明您的活动正在调用 AndroidInjection.inject(this)。

您是否正在定义自己的应用程序类来实现 HasActivityInjector?

根据Robolectric's documentation

Robolectric 将尝试创建您的应用程序的实例 清单中指定的类

就我而言,有效的方法是将单元测试配置为包含 Android 资源:

testOptions{
    unitTests{
        includeAndroidResources true
    }
}

在我的模块 build.gradle 中,在 android{} 部分下。

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多