Junit在通过测试时抛出警告

时间:2009-08-05 00:07:03

标签: java unit-testing junit

我正在研究一个项目,我们正在使用junit进行测试,但由于它还处于早期阶段,许多功能尚未实现,尽管它们已经为它们编写了测试

这意味着这些测试(显然)总是失败

我想知道是否有人知道让JUnit在显示警告时通过测试的方法。最好使用可自定义的消息,以便我们注意到该功能尚未实现。

关键在于我们只想在所有测试都通过的情况下编写代码才能编译,而目前这是不可能的。

我意识到我们可以注释掉或删除问题测试,但是我们冒着忘记在以后添加它们的风险。

7 个答案:

答案 0 :(得分:9)

我见过的大多数JUnit运行程序都会为您提供测试用例的四种状态之一:传递,失败,有错误或被忽略。

因为错误(抛出异常)以类似的方式报告失败(“红色结果”)没有一个好的方法来生成警告并仍然有“绿色结果” - 我认为这是什么你在找?

正如Janusz所提到的,您可以使用@Ignore属性来忽略可以包含消息的测试用例:

@Ignore("disabled until implementation is finished")
public void testMe() {
   //do something
}

大多数参与者不会在结果中明确地列出它们,但您可以使用工具自动查找任何被忽略的测试用例,方法是查找@Ignore属性并在之后生成报告,其中列出了所有测试用例已被跳过的原因(在属性中给出)为什么。

答案 1 :(得分:9)

org.junit.Assume会做你需要的吗?

答案 2 :(得分:5)

您可以在测试方法前面@Ignore。然后它取决于测试运行器你得到什么样的输出。您可以获得类似成功运行25个测试的内容,并忽略6个测试...

所有进一步的事情取决于您希望如何运行单元测试。

答案 3 :(得分:1)

我知道我已经大约2年了,但我会评论/忽略您不需要的测试,并且作为一个过程确保公共代码审查还包括单元测试以及提交的代码。哪个应该改进您的测试方法&整体报道。

答案 4 :(得分:0)

您可以在新方法中抛出NotImplementedException:

Apache Commons NotImplementedException

e.g。

public String getName() {
    throw new NotImplementedException("Oh so soon...");
}

然后在JUnit测试中指定它应该抛出这个异常:

@Test (expected=NotImplementedException.class) 
public void testGetName()  {
    myKingdom.getName();
}

这可以提醒每个人实现该功能,当然当他们添加它(或者错误地删除它)时,单元测试会注意到异常不再被抛出并且不稳定地抛出。

答案 5 :(得分:0)

当测试已满时,单元测试效果最佳,即他们做某事并且失败时出错。因此,它们并非旨在“半失败”或“通过警告”。

这是因为单元测试旨在测试。因此,当他们失败时,出现问题。

最好不要使用测试来跟踪尚未实现的内容,而是使用测试来测试 那里的功能。

因此,那些当前正在测试不存在的功能的测试应该在该功能出现之前运行。

答案 6 :(得分:0)

IMO,@ lumpynose是更好的答案。

如果由于某种原因,您不能根据缺少的要求执行测试,但这并不意味着代码已损坏,则可以使用Assume跳过它。

这是一段代码:

Assume.assumeTrue("The test is not meaningful because...", <condition_for_test_meaningful>);