【发布时间】:2015-10-04 02:16:27
【问题描述】:
我正在为一个已经存在很长时间的应用程序编写单元测试。我需要测试的一些方法是这样构建的:
public void someMethod() throws Exception {
//do something
}
如果我想测试这些方法,我必须在我的单元测试中写这样的东西:
@Test
public void someTest() {
try {
someMethod();
}
catch (Exception e) {
e.printStackTrace();
}
}
这样做是个好习惯吗?还是有其他方法可以测试这些方法?
我在互联网上进行了一些研究,发现了一些带有@Rule 注释和@Test(expected=Exception.class) 的解决方案,但这不起作用(Eclipse 一直在测试中将someMethod() 行显示为错误)。
我不知道这些是否是好的解决方案,因为我对整个单元测试故事还很陌生。
如果有对此了解很多的人可以帮助我,我将非常感激。
【问题讨论】:
-
不要抑制异常,除非您希望测试通过无论是否抛出异常。请注意,通过“是否”通过诸如异常发生之类的测试可能没有那么有用。
-
您可以通过将 JUnit 添加到您的方法 sig 中来让 JUnit 处理异常:public void someTest() throws Exception。但是,如果您想自己捕获异常以断言它被捕获,那么您给出的示例很好。
-
@Makoto JUnit 通过打印堆栈跟踪和测试失败来“处理它”。
-
@immibis:是的,这是真的。不过按照惯例,声明要抛出的异常是让一些更高级别的框架或 JVM 来处理它。在这一点上我应该更清楚。
-
这是否是一个好主意取决于您要做什么。
标签: java unit-testing junit try-catch