2017-11-25 5 views
1

Ich bin neu im Komponententest und versuche, JUnit zu lernen. Die Behandlung von Ausnahmen in Tests funktioniert in meinem Projekt nicht. Hier ist meine Klasse:JUnit-Ausnahmebehandlung funktioniert nicht

public class Things { 

    private int amount; 
    private int[] weights; 
    private int[] values; 

    public Things(int amount, int[] weights, int[] values){ 
    this.amount = amount; 
    if (amount!=weights.length || amount != values.length){ 
     throw new IllegalArgumentException("Amount of things different than weights or values length"); 
    } 
    this.weights=weights; 
    this.values=values; 
    } 
} 

und Testklasse:

public class ThingsTest { 

@Test 
public void testThingsConstructorIllegalArgumentsException(){ 
    boolean exceptionThrown = false; 
    try{ 
     Things thingsBadParams = new Things(5, new int[]{4,3,2}, new int[]{7,8}); 
    } 
    catch (IllegalArgumentException e){ 
     exceptionThrown = true; 
    } 
    Assert.assertTrue(exceptionThrown); 
} 
} 

Ich weiß, dass vielleicht dies nicht der beste Weg ist, Ausnahme zu behandeln, aber das ist nicht der Punkt. Ich habe versucht, jede Lösung wahrscheinlich (mit @Rule, @Test (expected = IllegalArgumentException.class) und jedes Mal, immer noch der Test fehlschlägt, gibt es einen roten Balken und Beschreibung darunter:

java.lang.IllegalArgumentException: Amount of things different than weights or values length 

at pl.dsdev.Things.<init>(Things.java:14) 
at ThingsTest.<init>(ThingsTest.java:11) 

Ich bin . mit IntelliJ Idea 2017, Maven und JUnit 4.12 Was soll ich tun Test erfolgreich machen

+4

Der Stack-Trace zeigt, dass Sie nicht den Code sind ausführen Sie auf dem Laufenden . Die Ausnahme wird vom ThingsTest-Konstruktor ausgelöst. Und es gibt keinen Konstruktor im geposteten Code. Zeigen Sie uns Ihren ** tatsächlichen ** Code –

Antwort

2

Sie können Sie einfach umschreiben Tests wie:

@Test(expected = IllegalArgumentException.class) 
public void testThingsConstructorIllegalArgumentsException(){ 
    Things thingsBadParams = new Things(5, new int[]{4,3,2}, new int[]{7,8}); 
} 
+2

Oder verwenden Sie JUnit Regeln für Ausnahmen .. – khmarbaise

0

Okey, JB Nizet hat mir geholfen, meinen Fehler zu finden, ich ve erzeugtes Objekt

Things things = new Things(5, new int[]{3,2,5,1,3,7},new int[]{2,7,1,2,4,5}); 

außerhalb des Testverfahrens, so dass jedes Mal diese Linie eine Ausnahme geworfen, weil es sechs Elemente, nicht 5. Danke Jungs :)