Java 有没有办法用Mockito模拟File.exist()/File.isFile()方法? ArrayList m_files=new ArrayList(); 对于(int i=0;i
我的代码是关于删除一些本地文件。我想对删除文件失败的情况进行单元测试。有没有办法模拟file.exist()/file.isFile()或以任何方式模拟该静态方法FileUtiles.deleteQuitely()或其他解决方案?您可以按如下方式模拟文件类行为Java 有没有办法用Mockito模拟File.exist()/File.isFile()方法? ArrayList m_files=new ArrayList(); 对于(int i=0;i,java,file,unit-testing,junit,mockito,Java,File,Unit Testing,Junit,Mockito,我的代码是关于删除一些本地文件。我想对删除文件失败的情况进行单元测试。有没有办法模拟file.exist()/file.isFile()或以任何方式模拟该静态方法FileUtiles.deleteQuitely()或其他解决方案?您可以按如下方式模拟文件类行为 ArrayList<File> m_files = new ArrayList<File>(); for(int i = 0; i < m_files.size(); i++) { File m_f
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 mockedFile = Mockito.mock(File.class);
Mockito.when(mockedFile.exists()).thenReturn(true);
public void deleteMyFile(列出m_文件){
对于(int i=0;i
测试代码如下所示
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());
}
}
}
}
@测试
公开无效测试(){
File mockedFile=Mockito.mock(File.class);
Mockito.when(mockedFile.exists())。然后返回(true);
Mockito.when(mockedFile.isFile())。然后返回(true);
列表文件=新的ArrayList();
添加(mockedFile);
MyTestClass MyTestClass=新的MyTestClass();
myTestClass.deleteMyFile(文件);
}
U可以使用power mock模拟静态方法
@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);
}
通过在测试类的顶部使用下面的注释,确保您为静态模拟准备了类
mockStatic(File.class);
when(File.exists()).thenReturn(true);
并使用
@RunWith(PowerMockRunner.class)
看,我试了很多次,但仍然不起作用。我可以模拟这个类中的其他对象,但不能用于文件。
@PrepareForTest(YourClassNameWhereYouWantToInjectStaticMock.class)