2017-11-25 16 views
1

私は単体テストに慣れていて、JUnitを学びたいと思っています。私のプロジェクトでは、テストでの例外の処理が機能していません。ここに私のクラスには、次のとおりです。JUnit例外処理が動作しない

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; 
    } 
} 

とテストクラス:

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); 
} 
} 

私は多分、これは例外を処理するための最良の方法ではないことを知っているが、それはポイントではありません。私はおそらく@Rule、@Test(予想= IllegalArgumentException.classとすべてのソリューションを()試してもテストが失敗するたびに、その下の赤いバーと説明があります:

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) 

私はIntelliJのアイデア2017、MavenとJUnitの4.12を使用して、私はテストを成功させるために何をすべき

+4

ありがとうスタックトレースはあなたが投稿コードを実行していないことを示しています。例外は、ThingsTestコンストラクターからスローされます。投稿されたコードにはコンストラクタはありません。 **実際の**コード –

答えて

2

をあなたは単にあなたのテストを書き換えることができます。?オーケー、JB Nizetは私が私の間違いを見つける助け

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

を表示するか、JUnit Rules for Exceptionsを使用してください。 – khmarbaise

0

、私は」作成したオブジェクト

試験方法の外
Things things = new Things(5, new int[]{3,2,5,1,3,7},new int[]{2,7,1,2,4,5}); 

、その6つの要素ではなく、5がありますので、この行は、例外をスローするたびに君たち:)