Нужно ли проверять вызов исключения путем замены локальной переменной 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);
}
}
}
Все равно тест проходит даже если менять значения переменной f.exists()
Вы же в данном тесте проверяете, что будет выброшено исключение, если файла нет?
В таком случае f.exists() должно вернуть false (либо f.isDirectory() == true) - вы же его устанавливаете в true:
Mockito.when(f.exists())
.thenReturn(true);
PS: для проверки исключения проще указать в аннотации @Test ожидаемое исключение, и если оно не будет выброшено - тест будет считаться не пройденным:
@Test(expected=FileNotFoundException.class)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей