Espresso intended(hasComponent(...)) 在简单示例中不起作用
Espresso intended(hasComponent(...)) not working in simple example
有很多这样的问题没有答案,我的一个新的空白项目也有这个问题,知道问题出在哪里吗?我没有做更多的事情:
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 个意图。
您的测试失败,因为被测应用程序未启动具有 MainActivity
组件名称的意图。 documentation 表示 intended()
:
Asserts that the given matcher matches a specified number of intents sent by the application under test.
因此,由于您的被测应用程序使用 MainActivity
作为其启动器 Intent,另一个以 MainActivity
作为其组件的 Intent 将不会被 MainActivity
触发。
一个有效的(更现实的)例子如下:
- 验证
MainActivity
成功触发 Intent 以启动 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()
}
有很多这样的问题没有答案,我的一个新的空白项目也有这个问题,知道问题出在哪里吗?我没有做更多的事情:
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 个意图。
您的测试失败,因为被测应用程序未启动具有 MainActivity
组件名称的意图。 documentation 表示 intended()
:
Asserts that the given matcher matches a specified number of intents sent by the application under test.
因此,由于您的被测应用程序使用 MainActivity
作为其启动器 Intent,另一个以 MainActivity
作为其组件的 Intent 将不会被 MainActivity
触发。
一个有效的(更现实的)例子如下:
- 验证
MainActivity
成功触发 Intent 以启动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()
}