Есть класс, методы которого необходимо протестировать. Собственно проблема: не могу правильно mock'нуть объекты тестируемого класса для покрытия метода тестом.
Метод класса, который необходимо протестировать.
public List<FileInfo> getAllFileInfos(Path dirPath) {
if (!Files.exists(dirPath)) {
throw new IllegalArgumentException(
getLocalizedMessage("dir_not_exists", dirPath));
}
Stream<Path> pathStream = Arrays.stream(getArrayOfPaths(dirPath))
.map(fileName -> dirPath + fileName)
.map(Paths::get);
return pathStream
.filter(path -> path.getFileName().toString().equals(metaInfoFileName))
.map(this::getFileInfosFromMetaInfo)
.flatMap(List::stream)
.collect(Collectors.toList()); }
public String[] getArrayOfPaths(Path dirPath) {
File directory = new File(dirPath.toString());
return directory.list(); }
Подскажите, что мне следует сделать дальше? Как mock'нуть Stream и его методы?
Если метод занимается чисто вызовом системных функций типа получения списка файлов или получения атрибутов файла, то вы в своем тесте будете тестировать системные функции, что само по себе смысла не имеет как минимум по нескольким причинам:
Не нужно мокать Arrays.stream
. Можно в unit-тестах воспользоваться правилом TemporaryFolder
@Rule
public TemporaryFolder tmpFolder = new TemporaryFolder();
@Test
public void yourTestWithoutMocks() {
<prepare tmpFolder, add files, add folder into it>
List<FileInfo> infos = getAllFileInfos(tmpFolder.getRoot().toPath())
<assert your infos>
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
На андройд 90 мои броадкасты на прослушку смс и входящих звонков не работают если активити останавливается
Всем привет, мучаю калькулятор, есть два куска кода, один предназначен для того чтобы суммировать значения в select, другой суммировать значения...