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()不会抛出任何检查过的异常。
发布于 2011-11-16 14:01:37
在上面的例子中,你可以毫不费力地移除抛出异常。然而,如果你有一个检查过的异常,如果你只是添加了抛出异常,代码就会变得更容易管理。看看另一种选择:
@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-16 08:54:35
这绝对不是一个限制。当您编写单元测试时,您实际上并不关心抛出哪种类型的异常。在expected exceptions之外,任何异常都会显示一个红色条,告诉您有什么不正常。因此,有一个“全部捕获”throws Exception子句就足够了。
发布于 2011-11-16 07:51:32
您不必抛出异常,我可以想象该工具可以执行静态分析,以确定是否可能抛出已检查异常。然而,当我手工编写单元测试时,我通常会添加throw子句,因为我总是会添加一行抛出检查异常的代码。
https://stackoverflow.com/questions/8144743
复制相似问题