14

これらは私のテストケースです

class Mother {

    @Before
    public void setUp() {
        if (!this.getClass().isAnnotatedWith("Version20")) { // pseudo code
            /*
             * stop this test without failing!
             */
        }

        // further setup
    }
}


@Version20
class Child extends Mother {

    @Test
    public void test() {
        // run only when Version == 20
    }
}

Mother の @Before メソッドで、Child でのテストを失敗または assertTrue(false) せずに停止することはできますか?

編集: 私はより多くのバージョン @Version19、@Version18 などを持っています。私のソフトウェアは構成ファイルを読み取り、結果を出力しています。いくつかのテストは特別なバージョンにのみ適用されます。小さなテストがたくさんあり、コードの重複が嫌いなので、テスト メソッド内でバージョン チェックを行いたくない

4

1 に答える 1

19

以前に同様の質問をしました。その結果、クラスのメソッドを使用して、実行時チェックAssumeに基づいてテストを無効にすることができます (これは静的条件です)。@Ignore

とはいえ、特定のアノテーションに基づいて常に無効にしている場合は、実行時に実際にこれを行う必要はないように思われます。クラスに単にアノテーションを付けるだけ@Ignore@Version20仕事ができ、間違いなくより明確になります。

テストが「1.0モード」で実行されている場合にのみ無視しているのではないかと思いますが、その場合は実行時のイントロスペクションであり、次のような方法でこれを行うことができます:

@Before
public void setUp() {
   if (!this.getClass().isAnnotatedWith("Version20")) {
      final String version = System.getProperty("my.app.test.version");
      org.junit.Assume.assumeTrue(version.equals("2.0"));
   }
}
于 2012-05-02T12:01:59.273 に答える