2016-05-19 4 views
0

Hw, чтобы издеваться над следующим методом listfiles()?Mocking file objects Mockito или Powermock?

File folder = new File(folderPath); 
for (File fileEntry : folder.listFiles()) { 
    try { 
     if (StringUtils.isBlank(fileEntry.toString())) { 
      throw new ConfigurationException("Sfile must be set"); 
     } 

     String json = resourceReader.readResource(fileEntry.toString()); 
     try { 
      config.add(parser.parseJson(json)); 
     } catch (Exception e) { 
      LOG.error("Error in parsing json"); 
     } 
    } catch (Exception e) { 
     throw new ServiceException("Could not parse sfrom the file: " + 
       fileEntry.getName(), e); 
    } 
} 
+0

Что не так с возвращением некоторого 'Iterable '? Какова конкретная проблема, с которой вы столкнулись? – Turing85

+0

Я делаю что-то вроде этого. @Mock File mockFile = Mockito.mock (File.class); Файл [] files = {admin, database}; Mockito.when (mockFile.listFiles()). ThenReturn (файлы); – Yahiya

+0

Если вы используете Powermock, вы можете получить его, чтобы вернуть mock 'File', когда вызывается' new File (...) '. Или вы можете изменить свой код, чтобы получить фабрику, чтобы вернуть ваш файл (или передать его в качестве параметра, вы можете передать макет из вашего модульного теста и издеваться над 'listFiles') – BretC

ответ

0

Предположим, у вас есть файлы в тестовом каталоге или добавьте некоторые .txt или любые другие файлы. Затем напишите эти инструкции в тестовом классе, если вы используете Mockito. Вам нужно добавить import static org.mockito.Mockito.when; в ATEST классе

File f = new File("c:/test"); 
File[] files = f.listFiles(); 
when(folder.listFiles()).thenReturn(files); 

Этим вы сообщаете метод испытания, чтобы войти внутрь для петли фактического класса, и вы, возможно, придется написать немного больше, когда (thisHappens) .thenReturn (givemethisresult); заявления.