2011-09-01 90 views
2

我正在尝试为一个方法编写一个单元测试,该方法将一个字符串作为参数 米,并在格式不正确时引发异常(如果没有问题,则为NONE) 。 我想编写一个参数化测试,它提供几个字符串和 预期的异常(包括如果输入 字符串格式正确,则不会引发任何错误!)。如果试图使用@Test(期望值= SomeException.class) 注释,我遇到了两个问题:在参数化JUnit 4+测试中对可选异常进行测试

  1. 期待= NULL是不允许的。 那么我怎么能测试没有例外的预期结果 (对于格式良好的输入字符串)呢?

  2. expect = not possible? 我还没有尝试过,但我强烈怀疑这是 阅读本文后的情况(请问您是否确实如此?): http://tech.groups.yahoo.com/group/junit/message/19383 这似乎是我找到的最佳解决方案。你怎么看待 它,尤其是相比: How do I test exceptions in a parameterized test?

预先感谢您的帮助,我期待着讨论:)

回答

1

有两个不同的测试 - 一个有效输入一个用于无效的。我没有使用JUnit 4,所以我不能评论确切的注释格式 - 但基本上你会有一个参数化测试与各种不同的无效输入,它说它确实期望一个例外,并单独测试各种不同的有效的输入,它没有说任何关于异常的东西。如果在您的测试没有说明应该出现异常时,测试将失败。

5

创建两个测试用例类:

  • ValidStringsTest
  • InvalidStringsTest

显然,第一个测试的有效投入各种(未抛出异常),而第二个总是期望例外。

记住:测试的可读性比生产代码的可读性更重要。不要在JUnit测试用例中使用古怪的标志,条件和逻辑。简单是国王。

另请参阅我的回答here了解如何干净地测试异常。

0

将测试用例拆分为两个测试类是许多情况下的适当方法 - 正如Tomasz和Jon所述。

但也有其他情况下,这种拆分不仅仅是可读性方面的不错选择。假设测试数据集中的行具有自然顺序,并且如果行按照自然顺序排序,则可以很容易地看到测试数据是否涵盖所有相关用例。如果将测试用例分成两个测试类,则不再有一种简单的方法来查看是否涵盖了所有相关的测试用例。对于这些情况, How do I test exceptions in a parameterized test? 确实提供了最佳解决方案。