Внедрение зависимости рукояти для тестирования пользовательского интерфейса говорит о том, что "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))
}