我有一个扩展 DaggerAppCompatActivity
的 Activity ,以使用新的 dagger android 注入(inject)工具在其上启用注入(inject)
我正在尝试使用 Robolectric 测试此 Activity ,但测试抛出
java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector
如何禁用 dagger 2 注入(inject)以将 Activity 测试为正常 Activity
测试代码
@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));
}
}
知道如何解决这个问题
最佳答案
我之前也遇到过类似的问题。您发布的错误似乎表明您的 Activity 正在调用 AndroidInjection.inject(this)。
您是否正在定义自己的应用程序类来实现 HasActivityInjector?
Robolectric will attempt to create an instance of your Application class as specified in the manifest
就我而言,有效的方法是将单元测试配置为包含 Android 资源:
testOptions{
unitTests{
includeAndroidResources true
}
}
在我的模块 build.gradle 中的 android{} 部分下。
关于android - 使用 dagger2 进行 Robolectric 测试 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597280/