为什么CodePro junit测试方法会抛出异常(在Eclipse中)?

时间:2011-11-15 23:42:34

标签: java eclipse junit codepro

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()不会抛出任何已检查的例外。

3 个答案:

答案 0 :(得分:2)

在上面的例子中,您可以删除抛出异常而没有任何问题。但是,如果您确实有一个已检查的Exception,那么只要添加throws Exception,代码就会变得更加简单。看看替代方案:

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

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

答案 1 :(得分:1)

绝对不是限制。当你编写单元测试时,你并不在乎什么 kind 的异常被抛出。在expected exceptions之外,任何异常都会导致红条告诉您某些内容不正常。因此,拥有“全部捕获”throws Exception条款就足够了。

答案 2 :(得分:0)

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