【发布时间】:2017-03-15 17:26:42
【问题描述】:
我有一些 junit 测试,它们创建了一些也应该关闭的资源。
实现此逻辑的一种方法是使用@Before 和@After 方法。
我所做的是将创建封装在某个实用程序类中以供重用。例如:
class UserCreatorTestUtil implements AutoClosable {
User create() {...}
void close() {...}
}
重点是对象自己关闭,而不是需要记住在@After中关闭它。
用法应该是:
@Test
void test() {
try (UserCreatorTestUtil userCreatorTestUtil = new UserCreatorTestUtil()) {
User user = userCreatorTestUtil.create();
// Do some stuff regarding the user's phone
Assert.assertEquals("123456789", user.getPhone());
}
}
问题是 junit 的 assert 关键字抛出 Error - 而不是 Exception。
try-with-resource 会“捕获”Error 并调用 close 方法吗?
* 在try-with-resources documentation 中找不到答案。
【问题讨论】:
-
OT:仅作记录:“我有一些 junit 测试会创建一些资源” 所以你没有 UnitTests,你有使用 UnitTest - Framework 的 Module Tests。
-
@TimothyTruckle - 在挑选 nits 时:一些资源 也可以指代一个模拟版本,但仍然必须关闭它才能使一切有意义。
-
错误和异常(大写 E)都是异常的种类(小写 e)。
-
@immibis 但我们可以称它们为 Throwables 以区分大小写且明确。
-
@Thilo 但不区分大小写的语言简直就是撒旦。
标签: java exception junit exception-handling