次のテストがあります:
@Test(expected = IllegalStateException.class)
public void testKey() {
int key = 1;
this.Finder(key);
}
しかし、JUnitは、テストが失敗すると報告しますが、予想どおりIllegalStateException
をスローします。
この実行を行うために他の何かを構成する必要がありますか?
今すぐテストを実行します
@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {
}
この質問 のようですが、それでも目的の結果が得られません。
test
プレフィックスを削除しても、エラーが発生します。
私はこれらのテストをEclipseで実行する必要がありますが、JUnit 4ランナーを使用するように構成されています。
問題は、テストがネストされたクラスがTestCase
の拡張であるということでした。これはJUnit 3スタイルであるため、注釈は機能しませんでした。
現在、私のテストクラスはそれ自体がクラスです。
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase
基本テストでTestCaseクラスを拡張したときに、@ Test(expected = ...)アノテーションにも問題がありました。 @RunWith(JUnit4.class)を使用するとすぐに役立ちました(非常にエレガントなソリューションではありませんが、私は認めます)
私はこれを試してみましたが、期待どおりに動作します。
public class SampleClassTest {
@Test(expected = ArithmeticException.class )
public void lost(){
this.lost(0);
}
private void lost(int i) throws ArithmeticException {
System.out.println(3/i);
}
}
また、junit4が依存関係として追加されていることを確認してください。@(注釈)はjunit4の新機能です。
私は同じ問題に直面しました、解決策は簡単です「TestCaseクラスを拡張しないでください」
いいえ、このJUnitテストはそのまま動作するはずです-この側でこれ以上必要なことはありません。
テストでIllegalStateException
が確実にスローされるのはなぜですか?異なるタイプの別の例外にラップされる可能性はありますか?
JUnitから正確な失敗メッセージを投稿してください。
@duffymoが示唆したように、テストが実際にスローする例外(ある場合)を確認するのは簡単です。
これは私には正しいようです。
前提を確認してください。あなたはsure例外をスローしますか?あなたの言うことが本当なら、注釈から期待されたものを取り除くと失敗するはずです。
デバッガーでコードをステップ実行して、何が起こっているのかを確認します。 IntelliJのように、IDEがそうなると思います。
Importsステートメントを変更したのと同じ問題がありました。私は削除しました :
import org.junit.jupiter.api.Test;
import junit.framework.TestCase;
追加された:
import org.junit.Test;
そして、それは私にとってはうまくいきました。
これをJUnit4でテストしました。このDOは動作し、テストは正常に完了します。 Illegal
Selector
Exception
などであるかどうかを確認します。