仪器测试:将测试定义为以下强制测试
问题描述:
我有一个Android仪器测试,用于测试我的ServerApi和多个其他测试设备,我的活动。仪器测试:将测试定义为以下强制测试
ServerApi测试可能失败的原因之一是(可惜)是一个坏的无线网络。在这种情况下,我的整个测试套件需要很长时间才能完成,因为处理网络访问的所有活动都必须在发生故障之前超时。
如何定义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损坏而导致测试失败。
首次试运行不指望所有的测试: 下面的测试运行,再次显示了所有测试:
无论引起了不被执行的测试,我可以利用这一机制为了我想要达到的目标?
答
如果运行测试需要稳定的Wifi,并且您希望跳过运行它们,您可以实现自定义TestRule,在该规则中的自定义语句中执行Wifi检查。在该声明的评估方法中,您随后致电Assume.assumeTrue("Skip test due to poor Wifi connection", methodThatReturnsTrueIfWifiIsUp())
。然后,您可以将此规则添加到需要Wifi的每个测试类中,并且如果网络查找需要很长时间才能完成,并且您不希望为每个测试类执行此操作,则可能会存储静态连接状态。
这样可能会好,但测试报告很难理解,因为很多测试都失败了,而且我们必须推断这些都是基于相同的原因(通过深入研究报告)。如果只有一个测试会失败并停止执行以下操作,这将立即清除 – PhilLab
@PhilLab在这种情况下可能会有所帮助https://*.com/questions/10036894/stopping-junit-suite-if-particular - 试验 - 失败。 – fejd