Мокинг File.listFiles с использованием Mockito3.3.3 и Junit 5.6 - PullRequest
0 голосов
/ 05 августа 2020

Метод тестирования

    public int check() {
        File f =new File("as.txt");
        File[] arr = f.listFiles();
        return arr.length;
    }

Тестовый класс

@ExtendWith(MockitoExtension.class)
public class TestDataService {

    @InjectMocks
    private DataService dataService;
    
    @Test
    void chett() {
        File[] arr = {new File("we.txt")};
        File ff =Mockito.mock(File.class);
        when(ff.listFiles()).thenReturn(arr);
        assertEquals(1, dataService.check());
    }
}

Я получаю исключение нулевого указателя в File [] arr = f.listFiles ();

1 Ответ

0 голосов
/ 05 августа 2020

Вам необходимо изменить реализацию вашего check() метода

public int check() {
     File f = new File("C:\\");
     File[] arr = f.listFiles();
     return arr.length;
}

Согласно документации listFiles() он должен содержать каталог, иначе он вернет вам null. If this abstract pathname does not denote a directory, then this method returns null. Otherwise, an array of File objects is returned, one for each file or directory in the directory. Pathnamesdenoting the directory itself and the directory's parent directory are not included in the result.

Затем вы можете создать свой тестовый класс следующим образом

@ExtendWith(MockitoExtension.class)
public class TestDataService {

    @InjectMocks
    private DataService dataService;
    
    @Mock
    private File f;

    @Test
    void chett() {
        File[] arr = { new File("C://") };
        when(f.listFiles()).thenReturn(arr);
        assertEquals(1, dataService.check());
    }
}

ИЛИ это

@ExtendWith(MockitoExtension.class)
public class TestDataService {

    @InjectMocks
    private DataService dataService;
    
    @Mock
    private File f;

    @Test
    void chett() {
        File[] arr = { new File("C://") };
        File ff = Mockito.mock(File.class);
        when(ff.listFiles()).thenReturn(arr);
        assertEquals(1, dataService.check());
    }
}
...