1

我们有一个自定义应用程序,它通过入口点访问器进行字段注入。字段注入在生产代码中工作正常,因为自定义应用程序的超类使用 @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);
    }
4

0 回答 0