前言:为了模拟静态方法,Mockito 有一个MockedStatic
继承自AutoClosable
. 因此,它通常是这样使用的:
try (MockedStatic<SomeUtil> staticMockedSomeUtil = new MyClass()) {
// некоторая логика
}
我想指出,方法MockedStatic
不会抛出检查异常,包括close()
.
在这方面,我想到了放弃使用块try-with-resources
并制作类似这个实用程序的东西,我将在测试中使用:
public class TestUtil {
private final List<MockedStatic<?>> activeResources = new ArrayList<>();
public <T> MockedStatic<T> mock(Class<T> clazz) {
MockedStatic<T> mockedClass = MockedStatic.mockStatic(clazz);
activeResources.add(mockedClass);
return mockedClass;
}
public void closeAll() {
activeResources.forEach(resource -> resource.close());
}
}
首先,在测试中可以拒绝使用try-with-resources
,代码会变得更干净。其次,我想编写一个实用程序类来测试整个团队都将使用。
try-with-resources
因此,问题是:如果用于访问资源的类在运行或关闭时不抛出检查异常,我是否需要?
这是可能的(尤其是在测试中)。
try-with-resources是“语法糖”,可以更轻松地使用
AutoClosable
自动调用close()
.如果您更喜欢另一种(相当可靠的)释放资源的方式(调用
close()
),那么您可以轻松地做到不自动释放。我的问题可以通过查看编译成的内容来回答
try-with-resources
。以下是此类代码的示例:
编译为:
您可以看到引擎盖下没有任何超自然现象发生。具体来说,就我而言,当然,如果您提供可靠的关闭机制,则
MockedStatic
可以不使用。try-with-resources