我想测试这段代码引发的异常:
private void delete(final File file, final String fileName) {
boolean deleted = file.delete();
if (deleted) {
log.info("File {} was deleted", fileName);
} else {
throw new RuntimeException("The file exists but could not be deleted");
}
}
我的第一个想法是创建一个在单元测试中无法删除的临时文件。当然,我想控制这种行为以在测试后删除该文件。但我认为这是不可能的,这是矛盾的。将文件设置为“只读”不适用于这种情况。
那么,有什么想法吗?
我可以创建一个新类并传递删除文件并返回 boolean 值的责任,这样我就可以模拟它并测试我的异常。但在执行此操作之前,我想探索使用 Junit 和 Java 的另一种可能性。
最佳答案
我认为创建临时文件或锁定文件是多余的,不是必需的。
文件无法删除的事实取决于托管该文件的文件系统的运行时条件。您不需要在单元测试中重现这些条件,而且在单元测试中重现这些条件并不能保证运行时使用的文件不可删除。所以我认为单元测试中不应该考虑这一点。
您可以简单地模拟/ stub File.delete()
使其返回 false
并断言抛出 RuntimeException
:实际的断言的行为。
以 Mockito 为例:
@RunWith(MockitoJUnitRunner.class)
public class FileServiceTest {
@Test(expected = RuntimeException.class)
public void myMethodToTest() throws Exception {
File file = Mockito.mock(File.class);
Mockito.when(file.delete()).thenReturn(false);
FileService.delete(file, "test");
}
}
关于java - 当文件存在且无法删除时如何测试方法异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921791/