谁能帮我解决我的问题?
我在 Junit 中使用 Robotium 测试我的程序。
我的问题是:
当我检测到junit有故障时,如何使用代码检测程序有故障?那么,如果没有发生错误,我可以继续运行吗?例如,如果没有错误,继续测试,否则退出。
我建议使用 Java 的内置断言进行测试。创建断言:
assert someBoolean : message;
例如:
assert (myValue == 3) : "myValue was " + myValue + ", should have been 3";
运行程序时,默认情况下禁用断言。要使用断言运行您的程序,请像这样运行它:
java -enableassertions MyClass
然后,如果您的程序使用此运行时选项运行,则无论何时达到断言,都会发生以下情况:
例如:
int myVar = 5;
assert (myVar == 3) : "myVar is " + myVar + " not 3";
结果是
Exception in thread "main" java.lang.AssertionError: myVar is 5 not 3
IF 断言已启用。请记住-enableassertions
:所有这些仅在您使用or启用断言时才会发生-ea
。如果你不这样做,断言将被跳过。
当我检测到junit有故障时,如何使用代码检测程序有故障?那么,如果没有发生错误,我可以继续运行吗?例如,如果没有错误,继续测试,否则退出。
这没有多大意义。如果您在 JUnit 测试中失败,则意味着您的程序中存在失败。如果没有失败,单元测试将自动进行下一个测试。
但也许你在问你是否可以这样做:
// in some unit test
assert(....); // <<--- this test fails:
// Do something so that the unit test will continue to the next assertion ...
assert(....)
答案是你不能以任何有用的方式做到这一点:
单元测试框架只能报告单元测试失败,这些失败表明它们通过异常终止而失败。
您可以编写一个单元测试来捕获assert(...)
orfail(...)
调用引发的异常并继续下一个断言。但这会破坏之前单元测试失败的所有证据。
因此,如果您希望能够在第一个断言失败的情况下执行第二个断言,则需要将它们设为单独的测试用例。
您可能还会问是否有办法让 JUnit 测试运行器在第一次失败的单元测试时中止。答案是肯定的,这是可能的,但你将如何做到这一点取决于你正在使用的测试运行器。
您可以断言条件为真或假-
assertTrue(soloObject.waitForActivity("Activity Name"));
您可以使用 robotium 提供的所有方法来进行断言,而不是等待活动,例如isTextFound("text")
、isTextFound("text")
、isCheckBoxChecked(index)
等。