Android - AssertionFailedError в методе startActivity в классе тестирования ActivityUnitTestCase
Я пытаюсь проверить активность в модуле. Я просто пытаюсь запустить эту операцию в методе тестирования, но у меня всегда есть AssertionFailedError
. Я искал в Интернете эту проблему, но не нашел решения. Любая помощь приветствуется.
Это мой тестовый класс:
public class ContactActivityTest extends ActivityUnitTestCase<ContactActivity> {
public ContactActivityTest() {
super(ContactActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
}
public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
Intent intent = new Intent(getInstrumentation().getTargetContext(),
ContactActivity.class);
startActivity(intent, null, null);
}
@Override
public void tearDown() throws Exception {
super.tearDown();
}
}
И это ошибка:
junit.framework.AssertionFailedError
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:147)
at com.modilisim.android.contact.ContactActivityTest.testWebViewHasNotSetBuiltInZoomControls(ContactActivityTest.java:29)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1763)
С уважением.
Ответы
Ответ 1
ActivityUnitTestCase метод startActivity() должен быть вызван только в основном потоке.
Это можно сделать следующими способами:
-
Используйте аннотацию @UiThreadTest до вашего тестового метода:
@UiThreadTest
public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
Intent intent = new Intent(getInstrumentation().getTargetContext(),
ContactActivity.class);
startActivity(intent, null, null);
}
-
Используйте метод runOnMainSync класса Instrumentation:
public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
final Intent intent = new Intent(getInstrumentation().getTargetContext(),
ContactActivity.class);
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
startActivity(intent, null, null);
}
});
}
Почему я прав?