为什么CodePro junit测试方法抛出Exception(在Eclipse中)



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()不抛出任何检查异常

在上面的例子中,您可以毫无问题地删除抛出异常。然而,在您确实有一个检查异常的情况下,如果您只添加抛出异常,代码就会变得更容易管理。看另一个选项:

@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添加到您的测试方法中要比将所有已检查的异常添加到列表中容易得多。你确实会违反一些检查样式规则:-)

好的做法?这是可以接受的做法。它使测试的维护更容易,代码也更清晰。

这绝对不是限制。当您编写单元测试时,您并不真正关心抛出的类型异常是什么。在预期异常之外,任何异常都将导致一个红色条,告诉您某些事情不正常。因此,有一个"catch all"throws Exception子句就足够了。

您不必抛出Exception,并且我认为该工具可以执行静态分析以确定是否可以抛出检查异常。然而,当我手工编写单元测试时,我通常会添加throw子句,因为我总是添加一行抛出检查异常的代码。

相关内容

最新更新