【问题标题】:Why does CodePro junit test methods throw Exception (in Eclipse)?为什么 CodePro junit 测试方法会抛出异常(在 Eclipse 中)?
【发布时间】:2011-11-15 23:42:33
【问题描述】:

Eclipse 的 CodePro 生成 JUnit 测试,但是,它生成的所有测试方法都会抛出 Exception,即使不可能抛出已检查的异常。这是 CodePro 的限制,还是我以前从未见过的良好 JUnit 实践?

例如:

@Test
public void testCategory_1()
    throws Exception {
    String categoryName = "";

    Category result = new Category(categoryName);

    // add additional test code here
    assertNotNull(result);
    assertEquals(null, result.getCategoryName());
}

new Category(String)result.getCategoryName() 不抛出任何已检查异常。

【问题讨论】:

  • 我看不出这有什么好处。

标签: java eclipse junit codepro


【解决方案1】:

在上述情况下,您可以毫无问题地删除 throws Exception。但是,如果您确实有一个已检查的异常,那么如果您只添加 throws 异常,代码就会变得更易于管理。看看替代方案:

@Test public static void testIt() {
    try {
        foobar(); // throws an IOException
    } catch (Exception e) {
        fail("caught an exception " + e.getMessage());
    }
}

相对于:

@Test public static void testIt() throws IOException {
    foobar();
}

JUnit 处理异常的方式与断言失败(实际上实现为 AssertionError)完全相同,因此如果您的代码中出现意外异常,它将导致测试失败,这可能正是您想要的。而且你的测试更清晰

如果您有预期的异常,则可以在 @Test 注释中将其指定为 expectedException 或使用 TestRule ExpectedException

当我检查代码中的异常时,我经常使用它。将throws Exception 添加到您的测试方法比添加所有已检查异常的列表要容易得多。不过,您确实违反了一些检查样式规则:-)

好的做法?比较可以接受的做法。它使测试的维护变得更加容易,代码也更加清晰。

【讨论】:

    【解决方案2】:

    这绝对不是限制。当您编写单元测试时,您并不真正关心抛出什么种类异常。在expected exceptions 之外,任何异常都会导致一个红色条告诉您某些事情不正常。因此,有一个“包罗万象”throws Exception 子句就足够了。

    【讨论】:

      【解决方案3】:

      您不必抛出异常,我会想象该工具可以执行静态分析以确定是否可以抛出已检查的异常。但是,当我手动编写单元测试时,我通常会添加 throw 子句,因为我总是会添加一行确实引发检查异常的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 2021-02-08
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多