我有几个类(class)来测试我的应用程序。如果持续时间超过 4 秒,我希望测试失败。我的代码破坏了测试,但在某些情况下它不会执行下一个测试类。
当我写的时候(与超时无关,只是fail()的一个例子):
public void testSmth() {
fail("msg");
}
失败跟踪是空的,它破坏了测试并开始另一个测试。但是当我想让它像超时一样:
public void testSmth() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
fail("msg");
}
}, 4000);
// some tests (that even lasts more than 4 secons) like clickOnImage() etc.
}
它破坏了测试,但它不执行下一个测试,并且在失败跟踪中有:
Test failed to run to completion. Reason: 'Instrumentation run failed due to ''junit.framework.AssertionFailedError''. Check device logcat for details
在 LogCat 中我得到:
07-26 11:46:07.428: E/AndroidRuntime(6195): FATAL EXCEPTION: Timer-1
07-26 11:46:07.428: E/AndroidRuntime(6195): junit.framework.AssertionFailedError: msg
07-26 11:46:07.428: E/AndroidRuntime(6195): at junit.framework.Assert.fail(Assert.java:47)
07-26 11:46:07.428: E/AndroidRuntime(6195): at java.util.Timer$TimerImpl.run(Timer.java:284)
或者也许还有其他方法可以做我想做的事?
谢谢。
最佳答案
如果您只是想在超时时使测试失败,这应该足够了:
public void test1() throws Exception {
long start = System.currentTimeMillis();
solo.sleep(5000);
if (System.currentTimeMillis() - start > 4000) {
fail("msg");
}
}
public void test2() throws Exception {
long start = System.currentTimeMillis();
solo.sleep(3000);
if (System.currentTimeMillis() - start > 4000) {
fail("msg");
}
}
在执行过程中很难破坏测试,您也可以在每个命令后检查超时,但是检查需要时间,并且您的测试方法将持续更长时间。
关于android - Robotium 中整个测试超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665354/