仪表测试:将测试定义为以下

时间:2017-07-06 10:26:55

标签: android unit-testing testing gradle android-instrumentation

我有一个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损坏,测试失败了。

首次测试不计入所有测试: First test run which does not count all tests 以下测试运行再次显示所有测试: Following test run which shows all tests again

无论是什么导致测试都没有被执行,我可以将这种机制用于我想要实现的目标吗?

1 个答案:

答案 0 :(得分:1)

如果运行测试需要稳定的Wifi,并且您希望跳过它们,则可以实现自定义TestRule,您可以在该规则中的自定义语句中执行Wifi检查。在该语句的evaluate方法中,然后调用Assume.assumeTrue("Skip test due to poor Wifi connection", methodThatReturnsTrueIfWifiIsUp())。然后,您可以将此规则添加到需要Wifi的每个测试类中,如果网络查找需要很长时间才能完成,并且您不想为每个测试类执行此操作,则可能存储静态连接状态。