2

我正在尝试为一个方法编写一个单元测试,该方法将字符串作为参数,如果格式错误则抛出异常(如果可以,则为 NONE)。我想编写一个参数化测试,它提供几个字符串和预期的异常(包括如果输入字符串格式正确,则没有抛出任何异常的情况!)。如果尝试使用 @Test(expect=SomeException.class) 注释,我遇到了两个问题:

  1. 不允许expect=null。那么我如何测试不抛出异常的预期结果(对于格式良好的输入字符串)?

  2. 期望=不可能?我还没有尝试过,但我在阅读后强烈怀疑是这种情况(请您说明这是否属实?): http ://tech.groups.yahoo.com/group/junit/message/19383 这个那么似乎是我找到的最好的解决方案。您对此有何看法,尤其是与之相比: 如何在参数化测试中测试异常?

提前感谢您的帮助,我期待讨论:)

4

3 回答 3

5

创建两个测试用例类:

  • 有效字符串测试
  • 无效字符串测试

显然,第一个测试各种有效输入(不抛出异常),而第二个总是期待异常。

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

另请参阅我的答案here以获取有关如何干净地测试异常的提示。

于 2011-09-01T20:14:16.170 回答
1

有两种不同的测试 - 一种用于有效输入,另一种用于无效输入。我没有使用过 JUnit 4,所以我无法评论确切的注释格式 - 但基本上你会有一个带有各种不同无效输入的参数化测试,这表示它确实期望一个异常,以及一个具有各种不同的单独测试没有说明异常的有效输入。如果在您的测试不应该抛出异常时抛出异常,则测试将失败。

于 2011-09-01T20:13:22.840 回答
0

在许多情况下,将测试用例分成两个测试类是合适的方法——正如 Tomasz 和 Jon 已经概述的那样。

但在其他情况下,仅就可读性而言,这种拆分并不是一个好的选择。让我们假设测试数据集中的行具有自然顺序,如果这些行按此自然顺序排序,则很容易看出测试数据是否涵盖所有相关用例。如果将测试用例分成两个测试类,则不再有一种简单的方法来查看是否涵盖了所有相关的测试用例。对于这些情况 ,如何在参数化测试中测试异常? 似乎确实提供了最佳解决方案。

于 2012-06-25T09:10:40.187 回答