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 AssertionError
die de Assert
genereert niet op als het mislukt, omdat het een Error
is (of, meer specifiek, het breidt java.lang.Error
). Zie de documentenvoor meer informatie over deze. Uw catch-blok vangt alleen Throwable
objecten 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 Error
in plaats van een Exception
. U kunt meer lezen over het (niet) opvangen van Error
in 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 AssertionError
te vangen.
Antwoord 2, autoriteit 9%
Als je zowel Exception
als Error
instanties wilt onderscheppen, gebruik dan:
...
catch (Throwable t)
{
...
}
Aangezien zowel Exception
als Error
Throwable
uitbreiden.
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.