检测代码中的故障

时间:2013-04-28 04:49:00

标签: java junit robotium

任何人都可以帮我解决问题吗? 我在Junit用Robotium测试我的程序。

我的问题是:

当我检测到junit中出现故障时,如何使用代码检测程序中是否存在故障?那么,如果没有错误发生,我可以继续运行吗?例如如果没有错误,继续测试,否则退出。

3 个答案:

答案 0 :(得分:1)

  

当我检测到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(...)fail(...)调用抛出的异常并继续下一个断言。但这会破坏先前单元测试失败的所有证据。

因此,如果您希望能够在第一个断言失败的情况下执行第二个断言,则需要将它们设为单独的测试用例。


您可能还在询问是否有办法让JUnit测试运行器在第一次失败的单元测试时中止。答案是肯定的,这是可能的,但你如何做到这将取决于你正在使用的测试运行器。

答案 1 :(得分:1)

我建议使用Java的内置断言进行测试。要创建一个断言:

assert someBoolean : message;

例如:

assert (myValue == 3) : "myValue was " + myValue + ", should have been 3";

运行程序时默认禁用断言。要使用断言运行程序,请按以下方式运行:

java -enableassertions MyClass

然后,如果您的程序使用此运行时选项运行,则无论何时达到断言,都会发生以下情况:

  1. 如果布尔值为true,程序将继续。
  2. 如果为false,则抛出带有指定消息的AssertionError。
  3. 例如:

    int myVar = 5;
    assert (myVar == 3) : "myVar is " + myVar + " not 3";
    

    结果

    Exception in thread "main" java.lang.AssertionError: myVar is 5 not 3
    

    如果启用了断言。 请记住:所有这一切只有在您使用-enableassertions-ea启用断言时才会发生。如果不这样做,则跳过断言。

答案 2 :(得分:0)

您可以将条件的断言设为真或假 -

assertTrue(soloObject.waitForActivity("Activity Name"));

您可以使用robotium提供的所有方法来制作示例isTextFound("text")isTextFound("text")isCheckBoxChecked(index)

,而不是为某个活动做好准备。