3

Junit 4 では、以下に示すように、注釈を使用してテスト スイートを追加します。

@RunWith(Suite.class)
@SuiteClasses({
A.class, B.class })
public class MyTestsuite
{
}

私の質問は、@SuiteClasses に含めたいクラスを決定する条件を指定する方法はありますか? 例えば; 上記のコードで、特定の条件が true の場合に A をクラス化したい場合、それ以外の場合は @SuiteClasses に追加したくないとします。

junit 3.8 では、以下のように suite() メソッドを使用して実行します。

public class MyTestsuite extends TestCase
{
  public static Test suite()
  {
     TestSuite suite = new TestSuite();
     if(some_condition_true)
     {
       suite.addTest(A.suite);
     }
     suite.addTest(B.suite);
     return suite;
  }
}

junit 4 を使用してこれを達成する方法はありますか?

4

2 に答える 2

3

拡張スイート:

@RunWith(MySuite.class)//Customized
@SuiteClasses({
A.class, B.class })
public class MyTestsuite
{}

MySuite を定義します。

public class MySuite extends Suite {
           public MySuite(Class<?> klass, RunnerBuilder builder)
                    throws InitializationError {
                super(klass, builder);
                try {
                    filter(new Filter() {
                        @Override public boolean shouldRun(Description description) {
                            return some_condition_true? true : false;
                        }

                        @Override
                        public String describe() {
                            return "...";
                        }
                    });
                } catch (NoTestsRemainException e) {
                    System.out.println("Hey, all test cases are not satisfied your condition.");
                }
            }
        }

プラス: 動作する可能性はありますが、テスト ケースをシンプルにすることをお勧めします。複雑なものを維持するのは難しい。

于 2012-05-18T02:12:15.653 に答える
0

Shengyuanの答えはうまくいくでしょう。

もう1つのオプションは、常にテストクラスを追加することですが、クラスにassumeTrue(condition)を設定して、実行するタイミングと意味をなさないタイミングを決定します。

(条件がテストの前提条件に関連している場合は、このアプローチの方が好きです。テスト自体が、実行する必要があるかどうかを知るのに最適な場所です)。

于 2012-05-18T02:47:46.920 に答える