3

それぞれに info_A と info_B を含む一連のデータがあります。私はしたいと思います:

if(info_A) {
  run Test A
} else if(!info_A) {
  run Test B
}

実際に実行されたテストのみが JUnit GUI ツリーに表示されることが非常に重要です。これどうやってするの?

次の解決策は機能しません

  • を使用するとテストAssume.assumeTrue(conditon)できますが、テストに合格したものとして表示されます。Ignore
  • これを行う
    Result result = JUnitCore.runClasses(TestStep1.class);
    と、正しい結果が得られますが、JUnit ツリーは構築されません。
  • @Catagories を使用すると、失敗したテストも表示されますが、これも望ましくありません。
4

2 に答える 2

3

条件付きでテストをオン/オフにするために使用Assumeできます。

テストが意味を持つ条件についての仮定を述べるのに役立つ一連のメソッド。仮定の失敗は、コードが壊れていることを意味するのではなく、テストが有用な情報を提供しないことを意味します。

于 2013-04-16T11:43:26.993 に答える
1

これは JUnit ルールで行うことができます。

ここにあなたの質問に特化したブログ投稿全体がありますが、要するに、次のことを行います。

  1. インターフェイスを実装するクラスを作成しorg.junit.rules.TestRuleます。このインターフェイスには、次のメソッドが含まれています
    Statement apply(Statement base, Description description);
    。引数は、実際には、base呼び出して実行するテストです。メソッドは実際には、それを実行する匿名インスタンスを返します。匿名インスタンスに、テストを実行するかどうかを決定するロジックを追加します。テストを実行する以外は何もしない実装の例については、以下を参照してください。はい、特に単純ではありません。base.execute()apply()StatementStatementTestRule
  2. 実装を作成したらTestRule、次の行を JUnit テスト クラスに追加する必要があります。 フィールドはpublicでなければならないことに注意してください。
    @Rule
    public MyTestRuleImpl conditionalTests;

以上です。幸運を祈ります - 先ほど言ったように、少しハックする必要があるかもしれませんが、ブログ投稿でかなりの量が説明されていると思います。それ以外の場合は、インターネット上 (または JUnit ソース コード内) に他の情報があるはずです。

何もしない TestRule 実装の簡単な例を次に示します。

public abstract class SimpleRule implements TestRule {
    public Statement apply(final Statement base, final Description description) {
        return new Statement() {
            public void evaluate() throws Throwable {
                try {
                    base.evaluate();
                } catch (Throwable t) { 
                    t.printStackTrace();
                }
            }
        };
    }
}
于 2013-04-16T11:53:17.103 に答える