4

テストスイートとして使用したい一連のファイルを含むプロジェクトテストスイートがあります。ファイルごとに 1 つのテストです

しかし、テストの数は何百にもなり、各テストは同じです: ファイルを解析し、出力をチェックします。各ファイルごとにメソッドを維持するのは面倒です。

JBoss Operation Network は TestNG を使用して、テスト スイートを作成し、同じクラスの複数のインスタンスを詰め込んで、テスト名を明示的に設定できるようにしました。

jUnit では、テスト名を変更する方法が見つかりませんでした。だから、みんな同じだろう。

カスタム結果のテスト名で同じクラスを複数回実行する方法または拡張機能はありますか?

PS: クラスのインストルメンテーションに頼りたくありません。

4

2 に答える 2

4

を作成するときに、コンストラクター引数としてTestSuite渡すことができます。desiredTestCaseName

public class AllTestSuite extends TestSuite{

  public static Test suite() {
      TestSuite suite= new TestSuite();
      Test testCase1 = new MyTest("TestCaseOne");
      Test testCase2 = new MyTest("TestCaseTwo");
      suite.addTest(testCase1);
      suite.addTest(testCase2);
      return suite;
  }
}

スイートを実行すると、コンストラクター ieTestCaseOneで指定された名前が参照されTestCaseTwo、テスト クラスはMyTest.

編集:

MyTestクラスでコンストラクターが次のように定義されていることを確認してください。

public MyTest(String name) {
    super(name);
}

追加のパラメーターのサポートが必要な場合は、テスト ケースにコンストラクターを追加して、パラメーターを受け入れ、それらをテスト ケース クラス変数 (最初はデフォルトのテスト シナリオ値でデフォルト設定) に割り当てることができます。これは、テストの実行中に使用できます。

public MyTest(String name, String param1, Integer param2...) {
    super(name);
    this.param1 = param1;
    this.param2 = param2;
}

テスト スイートを実行すると、JUnit コンソールは次のような画面になります。 ここに画像の説明を入力

于 2012-10-18T03:02:38.863 に答える
3

JUnit4を使用している場合は、@Parameterizedを確認できます。基本的な考え方は、実行することのリストを提供し、JUnitがリスト内の各項目に対して同じテストメソッドを実行することです。

バージョン4.10では、名前はそれほど大きくありません。名前として0、1、2 ...を取得しますが、4.11-beta-1(まもなくベータ版がリリースされる予定です)を使用すると、より優れた名前付けスキームを取得できます。名前を指定できるからです。@Parameterizedの上部にあるjavadocを参照してください。

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters(name= "{index}: fib({0})={1}") // we specify the name here
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
                { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
    }

    private int fInput;

    private int fExpected;

    public FibonacciTest(int input, int expected) {
        fInput= input;
        fExpected= expected;
    }

    @Test
    public void test() {
        assertEquals(fExpected, Fibonacci.compute(fInput));
    }
}

上記では、次のような名前になります

fib(0)=0
fib(1)=1
fib(2)=1

于 2012-10-18T12:20:59.280 に答える