使用dagger2进行Robolectric测试活动

时间:2018-02-03 12:19:30

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

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

我正在尝试使用Robolectric测试此活动,但测试抛出

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

如何禁用匕首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));
    }

}

任何想法如何解决这个问题

1 个答案:

答案 0 :(得分:1)

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

您是否定义了自己的实现HasActivityInjector的Application类?

根据Robolectric's documentation

  

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

在我的案例中,有效的是配置单元测试以包含Android资源:

testOptions{
    unitTests{
        includeAndroidResources true
    }
}

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