Espresso intended(hasComponent(...))在简单的例子中不能工作。

问题描述 投票:0回答:1

像这样的问题发了很多,却没有答案,我在新的空白项目中也有这个问题,知道是什么问题吗?我没有做更多的事情。

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();
    }
}

}

不管我是在setUp()中调用Intents.init();还是使用IntentsTestRule或ActivityScenarioRule,每次都会出现同样的问题。

ETestRunner: androidx.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 想要匹配1个意图。实际上匹配了0个意图。

Github repo

android android-espresso
1个回答
0
投票

你的测试失败了,因为一个带有 MainActivity 组件名称未被被测应用程序启动。该 文件 国家 intended():

断言给定的匹配器匹配了被测应用程序发送的指定数量的意图。

因此,由于被测应用程序使用的是 MainActivity 作为其发射器意图,另一个意图是以 MainActivity 因为它的组件不会被 MainActivity.

一个可行的(更现实的)例子如下。

  • 验证: 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()
}
© www.soinside.com 2019 - 2024. All rights reserved.