Внедрение зависимости рукояти для тестирования пользовательского интерфейса говорит о том, что "HiltAndroidRule" не был добавлен, но был

Я пытаюсь использовать Hilt для внедрения зависимостей, но выдает ошибку java.lang.IllegalStateException: The component was not created. Check that you have added the HiltAndroidRule. Однако добавляется HiltAndroidRule:

@RunWith(AndroidJUnit4.class)
@UninstallModules(ItemsModule.class)
@HiltAndroidTest
public class SelectItemActivityTest {

    @Rule
    public HiltAndroidRule hiltRule = new HiltAndroidRule(this);

    @Before
    public void init() {
        hiltRule.inject();
    }
    @BindValue
    List<Item> items = getItems();
    List<Item> getItems()  {
        List<Item> items = new ArrayList<>();
        items.add(new Item(1, "Item1", "", true, true, true));;
        items.add(new Item(2, "Item2", "", true, true, true));;
        items.add(new Item(3, "Item3", "", true, true, true));;
        return items;
    }

    @Rule
    public ActivityTestRule<SelectItemActivity> mActivityRule =
            new ActivityTestRule<>(SelectItemActivity.class);

    @Test
    public void text_isDisplayed() {
        onView(withText("Item1")).check(matches(isDisplayed()));
    }
}

Я также пробовал добавить ItemsModule внутри класса, но результат был тот же.

2 ответа

Вы должны обернуть его, используя RuleChain или применяя order параметр к Rule Аннотация.

Это подробно объясняется здесь: https://developer.android.com/training/dependency-injection/hilt-testing

У меня была такая же ошибка, когда я пытался протестировать действие, которое не было запуском. Я использую Kotlin, но что-то очень похожее должно относиться к Java.

Сначала вам нужно определить свой ActivityTestRule в качестве внебиржевой деятельности:

@Rule @JvmField var testRule = ActivityTestRule(UpgradeRequiredActivity::class.java, false, false)

А затем, после инъекции рукояти, запустите упражнение:

@Before fun setup() {
    hiltRule.inject()
    testRule.launchActivity(Intent(targetContext, UpgradeRequiredActivity::class.java))
}
Другие вопросы по тегам