2016-03-22 22 views
1

私はJUnitを使ってテストを始めようとしていますが、私が間違っていることを理解するのに苦労しています。私はかなりシンプルなものを作りました:JUnit:テストアノテーションと予想される例外

何かを作成できるクラス。これまでは、取得するオブジェクトがnullかどうかをテストしています。

public class TestedClass { 
    public void create(Object o) { 
     if (o == null) { 
      throw new IllegalArgumentException(); 
     } else { 
      System.out.println("Not null!"); 
     } 
    } 
} 

テスタークラスは、新しいTestedClassオブジェクトを作成し、nullで何かを作成しようとします。 IllegalArgumentExceptionが予期されます。

import org.junit.Test; 
public class Tester { 
    @Test(expected = IllegalArgumentException.class) 
    public void createWithNullShouldThrowException() { 
     TestedClass t = new TestedClass(); 
     t.create(null); 
    } 
} 

ちょうどメインクラスです。

public class Main { 
    public static void main(String[] args) { 
     Tester test = new Tester(); 
     test.createWithNullShouldThrowException(); 
     System.out.println("passed all tests!"); 
    } 
} 

私がそれを理解する方法は、テスト手順全体でIllegalArgumentExceptionがスローされた場合、正しく終了する必要があります。

それはテスタークラスでcreateWithNullShouldThrowException()メソッドで捕まるはずなので、起こるべきではありませんか、私はこれを正しく理解していないです
Exception in thread "main" java.lang.IllegalArgumentException 
    at TestedClass.create(TestedClass.java:4) 
    at Tester.createWithNullShouldThrowException(Tester.java:6) 
    at Main.main(Main.java:7) 

:私のプログラムが終了しているように、ケースどれですか?代わりにtry catchブロックでこれを行うことができますが、私はこの場合に何が間違っているかを知りたいと思います。何か助けがあれば、IntelliJ IDEA 16.1を使用しています。どんな助けもありがとう。

+0

メインメソッドでテスターのインスタンスを作成する必要はありません。 eclipseでは、ファイルを右クリックしてRun As-> JUnit testをクリックしてテストクラスを実行できます。私はかなり同じことがIntellijであると確信しています。 –

+0

'main()'で実行せず、jUnitを通して実行してください。正しく動作すると完全に動作します。 –

+0

脇に: '@Test(expected = IllegalArgumentException.class)'を使わないでください。代わりに 'ExpectedException'を使用してください。 http://stackoverflow.com/questions/156503/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests?rq=1を参照してください。ただし、受け入れられた回答は無視してください。これにより、例外の検出をより適切に制御できます。 –

答えて

4

メインクラス/メソッドは必要ありません。ユニットテストは、ユニットテストランナーを介して実行する必要があります。 Intellij Ideaでは、@Testアノテーションを持つクラスを右クリックし、[Run]メニュー項目をクリックするか、テストごとに小さなアイコンをクリックするか、テストフォルダのルートをクリックして[Run all tests]をクリックします。

mavenプロジェクトでは、テストが適切な場所にある場合はmvn testと入力できます。他のビルドツールには、テストスイートを実行する方法が含まれています。他のIDEと同じように。

mainメソッドを使用する場合は、correct test runnerを呼び出してjunitテストフレームワークを起動する必要があります。しかし、あなたが実際にこれをやりたがる可能性は非常に低いです。

+0

ありがとうございました、これは私を夢中にしていました。 – skulpt

関連する問題