【发布时间】:2017-07-06 10:26:54
【问题描述】:
我有一个 Android 仪器测试,用于测试我的 ServerApi 和多个其他测试仪器,例如我的活动。
ServerApi 测试失败的原因之一是(很遗憾)wifi 坏了。在这种情况下,我的整个测试套件需要很长时间才能完成,因为所有处理网络访问的活动都必须在失败之前遇到超时。
如何定义 ServerApiTest 在开始时运行,如果失败,则取消所有其他后续测试?
public class ServerApiTest extends ApplicationTestCase<Application> {
//...
public ServerApiTest() {
super(Application.class);
}
@Override
public void setUp() throws Exception {
Log.i(TAG, SERVER_KEYWORD + ": prepare");
super.setUp();
_context = getContext();
}
@Override
public void tearDown() throws Exception {
Log.i(TAG, SERVER_KEYWORD + ": cleanUp");
super.tearDown();
}
public void testPing() throws InterruptedException, ExecutionException,
URISyntaxException {
//...
}
作为一个活动测试的摘录示例:
@RunWith(AndroidJUnit4.class)
@MediumTest
public class RecordingActivityTest {
private static final String TAG = RecordingActivityTest.class.getSimpleName();
@Rule
public ActivityTestRule<RecordingActivity> _activityRule
= new ActivityTestRule<>(RecordingActivity.class);
@Test
public void testOnCreate() {
onView(withId(R.id.lytRecordingButtons)).check(
matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)));
}
//...
有趣的是,我在测试报告中观察到,在某些(罕见且尚待解释的)情况下,如果某些测试失败,测试套件似乎确实会中止。
查看屏幕截图:RecordingActivityTest 失败,测试次数报告为 25。但测试没有变化(仅修复导致 RecordingActivityTest 失败的错误),下一次构建再次正确显示所有 43 次测试 - 巧合现在由于 WiFi 损坏导致测试失败。
不计算所有测试的第一次测试运行: 以下测试运行再次显示所有测试:
无论是什么导致测试无法执行,我可以使用这种机制来实现我想要实现的目标吗?
【问题讨论】:
标签: android unit-testing testing gradle android-instrumentation