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.deleteQuately () или другими решениями?
Вы можете издеваться над поведением класса файла следующим образом.
File mockedFile = Mockito.mock(File.class);
Mockito.when(mockedFile.exists()).thenReturn(true);
Этот руководство должен помочь.
Редактировать...
Вам нужно сделать метод пригодным для тестирования. Метод должен принимать файлы, над которыми он работает. Имитируемые объекты следует передавать как параметры. Например,
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);
}
Я пробовал это много раз, но все равно не работал. Я могу издеваться над другими объектами этого класса, но не могу работать с File.
Вы можете издеваться над статическими методами с помощью power mock
mockStatic(File.class);
when(File.exists()).thenReturn(true);
Убедитесь, что вы подготовили свой класс для статических макетов, используя аннотацию ниже поверх тестового класса.
@PrepareForTest(YourClassNameWhereYouWantToInjectStaticMock.class)
И запустите свой тест с
@RunWith(PowerMockRunner.class)
.
См. stackoverflow.com/questions/11849728/simulate-file-in-java