web-dev-qa-db-ja.com

JUnit @Testの注釈が機能しない

次のテストがあります:

@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ランナーを使用するように構成されています。

33
user321068

問題は、テストがネストされたクラスがTestCaseの拡張であるということでした。これはJUnit 3スタイルであるため、注釈は機能しませんでした。

現在、私のテストクラスはそれ自体がクラスです。

48
user321068
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase 

基本テストでTestCaseクラスを拡張したときに、@ Test(expected = ...)アノテーションにも問題がありました。 @RunWith(JUnit4.class)を使用するとすぐに役立ちました(非常にエレガントなソリューションではありませんが、私は認めます)

9
pmar_x86

私はこれを試してみましたが、期待どおりに動作します。

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の新機能です。

7
Dipak

私は同じ問題に直面しました、解決策は簡単です「TestCaseクラスを拡張しないでください」

6
guesst

いいえ、このJUnitテストはそのまま動作するはずです-この側でこれ以上必要なことはありません。

テストでIllegalStateExceptionが確実にスローされるのはなぜですか?異なるタイプの別の例外にラップされる可能性はありますか?

JUnitから正確な失敗メッセージを投稿してください。

@duffymoが示唆したように、テストが実際にスローする例外(ある場合)を確認するのは簡単です。

3
Péter Török

これは私には正しいようです。

前提を確認してください。あなたはsure例外をスローしますか?あなたの言うことが本当なら、注釈から期待されたものを取り除くと失敗するはずです。

デバッガーでコードをステップ実行して、何が起こっているのかを確認します。 IntelliJのように、IDEがそうなると思います。

2
duffymo

Importsステートメントを変更したのと同じ問題がありました。私は削除しました :

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

追加された:

import org.junit.Test;

そして、それは私にとってはうまくいきました。

2
dhakre

これをJUnit4でテストしました。このDOは動作し、テストは正常に完了します。 IllegalSelectorExceptionなどであるかどうかを確認します。

1