像这样的问题发了很多,却没有答案,我在新的空白项目中也有这个问题,知道是什么问题吗?我没有做更多的事情。
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个意图。
你的测试失败了,因为一个带有 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()
}