Junit 4.12 Issue testing exception
Ich habe eine einfache Methode, um eine Datei abzurufen. Ich möchte testen, ob die Datei nicht vorhanden ist und hier beginnt mein Problem. Der Test schlägt weiterhin fehl.
Die Methode ist so etwas wie:
public Configuration populateConfigs(Configuration config) throws UnRetriableException {
try {
....
} catch (IOException | ConfigurationException e) {
log.error(" getConfiguration : ", e);
throw new UnRetriableException(e);
}
throw new UnRetriableException("problem getting config files.");
}
ei meinen Tests habe ich zwei verschiedene Lösungen ohne Erfolg ausprobier
Verwenden Sie den neuen Stil, wie im @ vorgeschlageSO Lösung
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testPopulateConfigurationMissing() throws Exception {
exception.expect(UnRetriableException.class);
DefaultConfigHandler configurationFactory = new DefaultConfigHandler(testDirectory, testFileThatIsNonExistant);
Configuration configuration = configurationFactory.populateConfiguration(systemConfig);
}
Für Methode zwei, wie ich sie früher kannte, werden Ausnahmen getestet.
@Test(expected = UnRetriableException.class)
public void testPopulateConfigurationMissing() throws Exception {
DefaultConfigHandler configurationFactory = new DefaultConfigHandler(testDirectory, testFileThatIsNonExistant);
Configuration configuration = configurationFactory.populateConfiguration(systemConfig);
}
Die Ausnahme wird wie folgt ausgelöst:
com.caricah.iotracah.exceptions.UnRetriableException: java.nio.file.NoSuchFileException: world/over
at com.caricah.iotracah.system.handler.impl.DefaultConfigHandler.populateConfiguration(DefaultConfigHandler.java:137),
at com.caricah.iotracah.system.handler.impl.DefaultConfigHandlerTest.testPopulateConfigurationMissingDirectory(DefaultConfigHandlerTest.java:137)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
Hier meine Frage, was muss ich noch tun, um den Test zu bestehen?
Ofcourse, ohne die junit3-Methode zum Abfangen der Ausnahme zu verwenden.