【问题标题】:Instrumentation Tests: define a test as mandatory for the following仪器测试:将测试定义为以下各项的强制性测试
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 这没关系,但测试报告会更难理解,因为很多测试都失败了,人们不得不推断这都是因为同样的原因(通过更深入地查看报告) .如果只有一个测试失败并停止执行以下,这将立即清楚
    • @PhilLab 这在这种情况下可能会有所帮助stackoverflow.com/questions/10036894/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2017-12-10
    • 2018-06-24
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多