0

ExceptionEclipse 的 CodePro 生成 JUnit 测试,但是,即使不可能抛出已检查的异常,它生成的所有测试方法也会抛出。这是 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()不要抛出任何已检查的异常。

4

3 回答 3

2

在上述情况下,您可以毫无问题地删除 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添加到您的测试方法而不是所有已检查异常的列表中要容易得多。不过,您确实违反了一些检查样式规则:-)

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

于 2011-11-16T06:01:37.237 回答
1

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

于 2011-11-16T00:54:35.427 回答
0

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

于 2011-11-15T23:51:32.120 回答