2011-11-15 148 views
0

Eclipse的CodePro生成JUnit测试,但是,即使不可能引发检查的异常,它生成的所有测试方法也会抛出Exception。这是CodePro的限制,还是我以前从未见过的良好的JUnit练习?为什么CodePro junit测试方法抛出Exception(在Eclipse中)?

例如:

@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()不抛出任何checked异常。

+0

我没有看到这方面的优势。 – mkro

回答

2

在上面的情况下,您可以删除抛出异常没有问题。但是,如果你有一个检查过的异常,如果你只是添加抛出异常,代码就变得更简单了。看看另类:

@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或使用TestRuleExpectedException

我在我的代码中检查异常时使用了很多。将throws Exception添加到您的测试方法而不是所有选中的例外列表中会更加容易。你确实遇到了一些checkstyle规则,但是:-)

好习惯?而不是可接受的做法。它使测试的维护更容易,代码更清晰。

0

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

1

它绝对不是一个限制。当你编写一个单元测试时,你并不在乎什么类别的异常被抛出。在expected exceptions之外,任何异常都会导致红色条块告诉您某件事情不正常。因此,有一个“全部”throws Exception条款就足够了。

相关问题