ArrayList<File> m_files = new ArrayList<File>();
for(int i = 0; i < m_files.size(); i++) {
File m_file = m_files.get(i);
if(m_file.exists()) {
FileUtils.deleteQuietly(m_file);
if(m_file.isFile()) {
m_log.error("Deleting file " + m_file.getName() +" fails");
throw new ServiceUnavailableException("Not successfully delete the file " + m_file.getName());
} else {
m_log.info("Successfully delete the file " + m_file.getName());
}
}
}
我的代码是关于删除一些本地文件的。删除文件失败时,我想对这种情况进行单元测试。有什么方法可以模拟file.exist()/ file.isFile(),还是可以模拟静态方法FileUtiles.deleteQuitely()或其他解决方案?
答案 0 :(得分:0)
您可以如下模拟文件类行为。
File mockedFile = Mockito.mock(File.class);
Mockito.when(mockedFile.exists()).thenReturn(true);
此tutorial应该有用。
编辑...
您需要使该方法可测试。方法应将其正在处理的文件纳入其中。模拟对象应作为参数传递。例如,
public void deleteMyFile(List<File> m_files){
for(int i = 0; i < m_files.size(); i++) {
File m_file = m_files.get(i);
if(m_file.exists()) {
FileUtils.deleteQuietly(m_file);
if(m_file.isFile()) {
m_log.error("Deleting file " + m_file.getName() +" fails");
throw new ServiceUnavailableException("Not successfully delete the file " + m_file.getName());
} else {
m_log.info("Successfully delete the file " + m_file.getName());
}
}
}
}
测试代码如下所示。
@Test
public void test(){
File mockedFile = Mockito.mock(File.class);
Mockito.when(mockedFile.exists()).thenReturn(true);
Mockito.when(mockedFile.isFile()).thenReturn(true);
List<File> files = new ArrayList<>();
files.add(mockedFile);
MyTestClass myTestClass = new MyTestClass();
myTestClass.deleteMyFile(files);
}
答案 1 :(得分:0)
U可以使用超级模拟功能模拟静态方法
mockStatic(File.class);
when(File.exists()).thenReturn(true);
通过在测试类的顶部使用以下注释,确保为静态模拟准备了类
@PrepareForTest(YourClassNameWhereYouWantToInjectStaticMock.class)
然后使用
@RunWith(PowerMockRunner.class)
。