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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage