4

多くのxmlテンプレートをテストする必要があるテスト手順があります。

xmlしかし、テンプレートごとにテストケースを作成する必要があることがわかりました。

junitには、1つのテストケース内に別のテストケースを作成できるようなメカニズムがありますか?

4

2 に答える 2

5

@Parameterizedを使用できます。これはあなたが望むものを与えるでしょう。単一のディレクトリ内のすべてのファイルに対してテストを実行する簡単なケースを次に示します。

@RunWith(Parameterized.class)
public class ParameterizedTest {
    @Parameters(name = "{index}: file {0}")
    public static Iterable<Object[]> data() {
        File[] files = new File("/temp").listFiles();

        List<Object[]> objects = new ArrayList<Object[]>(files.length);

        for (File file : files) {
            objects.add(new Object[] { file.getAbsolutePath() });
        }

        return objects;
    }

    private final String filename;

    public ParameterizedTest(String filename) {
        this.filename = filename;
    }

    @Test
    public void test() {
        System.out.println("test filename=" + filename);
    }
}

ファイル内の各テストは、によって返されるリスト内のエントリごとに1回実行されdata()ます。明らかにファイルを使ってやりたいことを行うことができますが、テストのリストを動的に作成する場合は、合格/不合格の基準も作成する何らかの方法が必要になります。したがって、多くのxmlを他のxmlに変換する場合は、結果のxmlも、別のディレクトリまたは別の(ただし予測可能な)名前で使用できるようにする必要があります。

于 2013-02-22T10:51:27.577 に答える
0

いいえ、ループ以外に「テストケース内のテストケース」タイプの機能はありません。

救助にループ!

@Test
public void xmlShouldBeValid() {
    String[] templates = new String[]{ TEMPLATE1, TEMPLATE2, TEMPLATE3 };
    for (String template : templates) {
        testTemplate(template);
    }
}

private void testTemplate(String template) {
    assertEquals("whatever", template);
}

このようなものが役立つかもしれません。私がよく使うもう1つのトリックは、ヘルパーが*メソッドをアサートするようにすることです。したがって、XMLにa、b、cの3つの属性があることを確認している場合は、次のように記述します。

private void assertTemplate(String template, String a, String b, int c) {
    String aFromTemplate = parseAfromTemplate(template); // normally this is done inline
    String bFromTemplate = parseBfromTemplate(template); // but a function to read easier
    String cFromTemplate = parseCfromTemplate(template);
    assertEquals(a, aFromTemplate);
    assertEquals(b, bFromTemplate);
    assertEquals(c, cFromTemplate);
}

これで、1つのテスト関数でassertTemplateを複数回呼び出すことができます。

@Test
public void xmlShouldBeValid() {
    assertTemplate("<hardcoded xml object>", "a", "b", "c");
    assertTemplate("<hardcoded xml object>", "r", "s", "t");
    assertTemplate("<hardcoded xml object>", "x", "y", "z");
}

もちろん、テンプレートのタイプにStringを使用する代わりに、使用しているフレームワーク(存在する場合)をXMLオブジェクトに置き換えてください。

于 2013-02-22T06:52:08.153 に答える