Любой способ издеваться над методом File.exist () / File.isFile () с помощью Mockito?

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 () или другими решениями?

См. stackoverflow.com/questions/11849728/simulate-file-in-java

user7294900 31.10.2018 04:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
8 347
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

 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.

QuestionMaker 31.10.2018 15:53

Вы можете издеваться над статическими методами с помощью power mock

    mockStatic(File.class);
    when(File.exists()).thenReturn(true);

Убедитесь, что вы подготовили свой класс для статических макетов, используя аннотацию ниже поверх тестового класса.

    @PrepareForTest(YourClassNameWhereYouWantToInjectStaticMock.class)

И запустите свой тест с @RunWith(PowerMockRunner.class).

Другие вопросы по теме