我们有一个自定义应用程序,它通过入口点访问器进行字段注入。字段注入在生产代码中工作正常,因为自定义应用程序的超类使用 @HiltAndroidApp 注释
但是当自定义应用程序被子类化并用作 Android Test Runner 中的 Hilt 测试应用程序时。
由于尚未生成组件,因此字段注入失败。错误提示“未创建组件。请检查您是否添加了 HiltAndroidRule。”
由于规则位于测试类中,因此在应用 @Rule 之前调用自定义应用程序的 onCreate。
有没有办法在应用 HiltAndroidRule 之前获取生成的组件?
class AppCore: Application{
@Inject B b;
fun onCreate(){
AppInitializerEntryPoint entryPoint = EntryPointAccessors.fromApplication(
getApplicationContext(),
AppInitializerEntryPoint.class);
}
}
@HiltAndroidApp
class HiltAppCore : AppCore()
测试赛跑者
public final class TestRunner extends AndroidJUnitRunner {
@Override
public Application newApplication(ClassLoader cl, String className, Context context) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return super.newApplication(cl, PpbTestHiltApp_Application.class.getName(), context);
}
自定义测试应用程序类
@CustomTestApplication(AppCore::class)
interface PpbTestHiltApp
测试班
@HiltAndroidTest
@RunWith(AndroidJUnit4.class)
@UninstallModules(AppLevelOverridesModule.class)
public class NavigationControllerTest {
public HiltAndroidRule hiltRuleLocal = new HiltAndroidRule(this);
@Rule
public final org.junit.rules.RuleChain mRuleChain;
public HiltAndroidRule hiltRule = new HiltAndroidRule(this);
public androidx.test.rule.ActivityTestRule activity;
public androidx.test.rule.GrantPermissionRule grantPermissionRule = androidx.test.rule.GrantPermissionRule.grant(android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
public NavigationControllerTest() {
super();
mRuleChain = org.junit.rules.RuleChain.outerRule(hiltRuleLocal)
.around(activity)
.around(grantPermissionRule)
.around(screenshotTestWatcher);
}