Wordt een beweringfout opgevangen door een catch-blok voor Java-uitzondering?

Code:-

try {
    Assert.assertEquals("1", "2");
} catch (Exception e) {
    System.out.println("I am in error block");
}

Als de assert-statements niet werken, zou ik de fout in het catch-blok willen vastleggen. Ik probeer met de bovenstaande code en het gebeurt niet.

Wordt de beweringfout opgevangen door een catch-blok voor Java-uitzondering?


Antwoord 1, autoriteit 100%

Je hebt je eigen vraag bijna beantwoord. Uw catch-blok vangt de AssertionErrordie de Assertgenereert niet op als het mislukt, omdat het een Erroris (of, meer specifiek, het breidt java.lang.Error). Zie de documentenvoor meer informatie over deze. Uw catch-blok vangt alleen Throwableobjecten die java.lang.Exception

Als je het echt wilt vangen, moet je

catch (AssertionError e) {
...

Echter, zoals anderenhebben vermeld, dit is een zeer ongebruikelijke manier om beweringen te gebruiken – ze zouden normaal gesproken moeten slagen en als ze falen, is het zeer ongebruikelijk dat u op de uitvoering van het programma. Daarom veroorzaakt de fout een Errorin plaats van een Exception. U kunt meer lezen over het (niet) opvangen van Errorin deze vraag .

Weet je zeker dat je niet alleen een test wilt – if ( variableName == "1")?

NBals je unit-test helpercode test, zoals een matcher, kan het zinvol zijn om de AssertionErrorte vangen.


Antwoord 2, autoriteit 9%

Als je zowel Exceptionals Errorinstanties wilt onderscheppen, gebruik dan:

...
catch (Throwable t)
{
...
}

Aangezien zowel Exceptionals ErrorThrowableuitbreiden.


Antwoord 3, autoriteit 5%

Nou, ik geloof dat je JUnit gebruikt voor het schrijven van je tests. In dat geval moet u uw Assert.assertEquals()niet vangen, omdat ze zouden moeten slagen voor normale testuitvoering. Als er een uitzondering wordt gegenereerd, betekent dit dat uw code niet naar behoren presteert.


Antwoord 4

Als je de fouten op die manier wilt opvangen, heb je iets als het volgende nodig:

if (num == 1 || num == 2) {
    throw new Exception();
}

U kunt uw eigen uitzonderingsklasse maken en het gewenste bericht doorgeven.

Other episodes