Полагаю, вы пытаетесь проверить свой метод getNameInc (..). Когда вы вызываете его, он ищет файлы в указанном вами каталоге и на основе того, что находит, украшает имя, которое вы ему дали.
Чтобы сделать класс модульно-тестируемым, вы должны абстрагировать зависимость от файловой системы, чтобы в макете вы могли смоделировать любое содержимое каталога, какое захотите. Ваш класс примет экземпляр этого интерфейса как зависимость и вызовет его, чтобы узнать, что находится в каталоге. Когда вы используете класс в своей программе по-настоящему, вы предоставите реализацию этого интерфейса, которая делегирует вызовы файловой системы JDK. Когда вы выполните юнит-тестирование класса, вы предоставите Mockito макеты этого интерфейса.
Избегайте использования слишком большой логики в классе FilesystemImpl, поскольку вы не можете написать для него строгий модульный тест. Держите это очень простой оберткой вокруг файловой системы, чтобы все интеллектуальные вещи были в Yourclass, для которого вы будете писать множество модульных тестов.
public interface Filesystem {
boolean contains(String dirpath, String filename);
}
public class FilesystemImpl {
boolean contains(String dirpath, String filename) {
// Make JDK calls to determine if the specified directory has the file.
return ...
}
}
public class Yourmainclass {
public static void main(String[] args) {
Filesystem f = new FilesystemImpl();
Yourclass worker = new Yourclass(f);
// do something with your worker
// etc...
}
}
public class Yourclass {
private Filesystem filesystem;
public Yourclass(Filesystem filesystem) {
this.filesystem = filesystem;
}
String getNameInc(String dirpath, String filename) {
...
if (filesystem.contains(dirpath, filename) {
...
}
}
}
public class YourclassTest {
@Test
public void testShouldAppendAAWhenFileExists() {
Filesystem filesystem = Mockito.mock(Filesystem.class);
when(filesystem.contains("/some/mock/path", "bankAccount.pdf").thenReturn(true);
Yourclass worker = new Yourclass(filesystem);
String actual = worker.getNameInc("/some/mock/path", "bankAccount.pdf");
assertEquals("bankAccountAA.pdf", actual);
}
@Test
public void testShouldNotAppendWhenFileDoesNotExist {
Filesystem filesystem = Mockito.mock(Filesystem.class);
when(filesystem.contains("/some/mock/path", "bankAccount.pdf").thenReturn(false);
Yourclass worker = new Yourclass(filesystem);
String actual = worker.getNameInc("/some/mock/path", "bankAccount.pdf");
assertequals("bankAccount.pdf", actual);
}
}
Поскольку между тестами существует много дубликатов, вы, вероятно, создадите метод настройки и сделаете некоторую работу там, а также создадите несколько переменных экземпляра для тестов:
private static final String TEST_PATH = "/some/mock/path";
private static final String TEST_FILENAME = "bankAccount.pdf";
private Filesystem filesystem;
private Yourclass worker;
@Before
public void setUp() {
filesystem = Mockito.mock(Filesystem.class);
worker = new Yourclass(filesystem);
}
@Test
public void testShouldAppendAAWhenFileExists() {
when(filesystem.contains(TEST_PATH, TEST_FILENAME).thenReturn(true);
String actual = worker.getNameInc(TEST_PATH, TEST_FILENAME);
assertEquals("bankAccountAA.pdf", actual);
}
etc...