Эспрессо предназначен (hasComponent (...)) не работает в простом примере - PullRequest
0 голосов
/ 30 апреля 2020

Есть много подобных вопросов, опубликованных без ответов, у меня также есть эта проблема с новым пустым проектом, есть идеи, в чем проблема? Я не делаю больше, чем это:

public class ExampleInstrumentedTest {

@Test
public void useAppContext() {
    Intents.init();
    final Intent intent = new Intent(ApplicationProvider.getApplicationContext(), MainActivity.class);
    try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(intent)) {
        Log.d("++", "state: " + scenario.getState());
        assertTrue(scenario.getState() == Lifecycle.State.RESUMED);
        intended(hasComponent(MainActivity.class.getName()));
        Intents.release();
    }
}

}

Не имеет значения, если я вызываю Intents.init (); в setUp () или используйте IntentsTestRule или ActivityScenarioRule, каждый раз возникает одна и та же проблема:

E / TestRunner: androidx.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: Требуется соответствовать 1 намерениям. Фактически соответствует 0 намерений.

Github repo

1 Ответ

0 голосов
/ 02 мая 2020

Ваш тест не пройден, поскольку намерение с именем компонента MainActivity не запускается тестируемым приложением. В документации указано intended():

Утверждается, что данный сопоставитель соответствует указанному числу намерений, отправленных тестируемым приложением.

Таким образом, поскольку тестируемое приложение использует MainActivity в качестве намерения для запуска, другое намерение с MainActivity в качестве компонента не будет запущено при работе MainActivity.

A (и более реалистично c) Пример:

  • Убедитесь, что MainActivity успешно запускает Намерение для запуска OtherActivity.
// In MainActivity

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val otherActivity = Intent(this, OtherActivity::class.java)
    startActivity(otherActivity)
}

// In your instrumented test

@Test
fun otherActivityIsLaunchedByMainActivity() {
    Intents.init()

    val intent = Intent(ApplicationProvider.getApplicationContext<Context>(), MainActivity::class.java)
    val scenario = ActivityScenario.launch<MainActivity>(intent)
    intended(hasComponent(OtherActivity::class.java.name))

    Intents.release()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...