【问题标题】:Testing for optional exception in parameterized JUnit 4+ test在参数化 JUnit 4+ 测试中测试可选异常
【发布时间】:2011-09-01 20:04:45
【问题描述】:

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

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

  2. expect= 不可能? 我还没有尝试过,但我强烈怀疑之后是这种情况 阅读本文(请您说明这是否属实?): http://tech.groups.yahoo.com/group/junit/message/19383 这似乎是我找到的最好的解决方案。你有什么想法 它,尤其是与之相比: How do I test exceptions in a parameterized test?

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

【问题讨论】:

    标签: java unit-testing exception junit4 parameterized-unit-test


    【解决方案1】:

    创建两个测试用例类:

    • ValidStringsTest
    • 无效字符串测试

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-01-28
          • 2019-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-29
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多