私は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を使用しています。どんな助けもありがとう。
メインメソッドでテスターのインスタンスを作成する必要はありません。 eclipseでは、ファイルを右クリックしてRun As-> JUnit testをクリックしてテストクラスを実行できます。私はかなり同じことがIntellijであると確信しています。 –
'main()'で実行せず、jUnitを通して実行してください。正しく動作すると完全に動作します。 –
脇に: '@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を参照してください。ただし、受け入れられた回答は無視してください。これにより、例外の検出をより適切に制御できます。 –