junit тест с Mockito и PowerMockito

240
16 февраля 2018, 18:59

Нужно ли проверять вызов исключения путем замены локальной переменной File.

public class ClassA {
public void writeToFile(String filePathString) throws FileNotFoundException {
        File f = new File(filePathString);
        if(f.exists() && !f.isDirectory()) {
        // do something
        }else throw new FileNotFoundException();
    }
}

Все равно тест проходит даже если менять значения переменной f.exists()

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
    ClassA classA;
    @Before
    public void setUp() throws Exception {
        classA = new ClassA();
    }
    @Test
    public void writeToFile_throwExIfFileNotFound() throws Exception {
        File f = Mockito.mock(File.class);
        Mockito.when(f.exists())
                .thenReturn(true);
        PowerMockito.whenNew(File.class)
                .withArguments(Mockito.anyString())
                .thenReturn(f);
        try{
            classA.writeToFile(Mockito.anyString());
        }catch (Exception ex){
            Assertions.assertThat(ex)
                    .isInstanceOf(FileNotFoundException.class);
        }
    }
}
Answer 1

Все равно тест проходит даже если менять значения переменной f.exists()

Вы же в данном тесте проверяете, что будет выброшено исключение, если файла нет?
В таком случае f.exists() должно вернуть false (либо f.isDirectory() == true) - вы же его устанавливаете в true:

Mockito.when(f.exists())
        .thenReturn(true);

PS: для проверки исключения проще указать в аннотации @Test ожидаемое исключение, и если оно не будет выброшено - тест будет считаться не пройденным:

@Test(expected=FileNotFoundException.class)
READ ALSO
ArrayList<String> наполнять пока не остановят

ArrayList<String> наполнять пока не остановят

Наполняю список с клавиатуры пока не введу специальное слово, потом вывожу все слова на экран кроме последнего

217
Как написать морской бой с “бесконечным” полем и нейро-алгоритмом выигрышной стратегии?

Как написать морской бой с “бесконечным” полем и нейро-алгоритмом выигрышной стратегии?

Хочу написать морской бой с “бесконечным” полем, то есть поле увеличивалось бы в масштабах, количество кораблей тожеКлиент серверное приложение

248
Почему крашится приложение?

Почему крашится приложение?

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

220