Есть ли способ смоделировать метод File.exist () / File.isFile () с помощью Mockito? - PullRequest
0 голосов
/ 31 октября 2018
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 () или другие решения?

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете смоделировать поведение класса файла следующим образом.

 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);
}
...