Kan iemand me vertellen wat er mis is met deze pseudo-code?

Ik ben niet bekend met JUnit, dus ik weet niet zeker of dat het probleem is van assertTrue (b_exception); , want als ik een System.out.println ("something"); daar zou het "iets" uitprinten ... Bedankt !!

Let op: het is pseudo-code, focus op de logica.

b_exception = false;
try{
   somethingThrowError();
}catch(Error e){
   b_exception =  true;
}
assertTrue(b_exception);
1
Is b_exception een lokale variabele of kan het somethingThrowError instellen op waar zonder een fout te genereren? Waarom Fout en niet Throwable ? Wilt u dat de bewering wordt aangenomen of mislukt als somethingThrowError een uitzondering genereert in plaats van een fout ?
toegevoegd de auteur Mike Samuel, de bron
Ik begrijp niet wat je vraagt ​​... er is niets mis met de psudo-code? zeg je dat b_exception de hele tijd false is?
toegevoegd de auteur Matt, de bron
Met de code die je hebt geschreven, is je boolean op false ingesteld, probeer je iets dat een uitzondering genereert (neem ik aan), dan wordt het betrapt waardoor de booleaanse waarde true wordt, tot slot controleert je assert-statement dat het waar is en zal de uitvoering verdergaan blok. Wat verwacht je te gebeuren?
toegevoegd de auteur Andrew Stubbs, de bron
Wat is het onverwachte?
toegevoegd de auteur suat, de bron
Iemand vraagt ​​me over deze vraag, dat is alles wat ik heb, en hij zei dat er een fout is, maar ik zie niets mis met zijn logica ... Dus ... heeft iemand enig idee? Denk eraan, het is gewoon pseudo-code, en er is iets mis in de logica ... dat is de enige hit die ik heb. Laat het me weten als je het antwoord weet. Bedankt!!
toegevoegd de auteur Kevin, de bron

3 antwoord

Ik kan alleen maar raden dat je dit zoekt:

try{
  somethingThrowError();
  fail("Exception expected");
}catch(AsSpecificAsPossibleException e){
  //should happen, OK
  //optionally assert exception message, etc.
}

Merk ook op dat het vangen van een Fout een slecht idee is, gebruik als specifieke uitzondering als je kunt.

UPDATE: @Michael Borgwardt's antwoord is eigenlijk nog beter, maar alleen als er niets anders is dan een enkele regel in je test (niets anders dat kan gooien). Ook staat @Test (expected ) je niet toe om extra uitzonderingen uit te voeren (maar zou je dat moeten doen?)

2
toegevoegd
@MichaelBorgwardt: Wow, goede vangst, gecorrigeerd, bedankt! Ik kan me niet herinneren wanneer ik de laatste keer expliciet Fout heb gebruikt ...
toegevoegd de auteur Tomasz Nurkiewicz, de bron
Het is zelfs zo slecht dat deze code is verbroken, omdat fail() ook gewoon een AssertionError gooit ...
toegevoegd de auteur Michael Borgwardt, de bron

Ik weet niet wat het probleem is met uw code, omdat u niet hebt aangegeven hoe het niet aan uw verwachtingen voldoet, maar het juiste idioom om te testen of er een uitzondering wordt gegenereerd, is om de annotaties van JUnit 4 te gebruiken:

@Test(expected=SpecificError.class)
public void testError(){
   somethingThrowError();
}
2
toegevoegd
Het is gewoon pseudo-code en mijn vriend vertelde me dat er iets mis is, zoals een testvraag ... maar ik kon echt geen logische fout vinden in die stukcode. Dus ... laat me alsjeblieft weten of je weet wat er mis is met de code, in het logische perspectief. Bedankt!!
toegevoegd de auteur Kevin, de bron

Weet niet zeker wat u denkt dat fout is met die code.
De assertTrue wordt altijd uitgevoerd, net als de System.out.println .
Het - de assertTrue - geeft een foutmelding als het argument niet true is, of "sla de test over" als het argument true is. < br> Misschien moet u System.out.println ("b_exception =" + b_exception); gebruiken om te zien wat er gebeurt.

1
toegevoegd