0

そのため、さまざまな Web サイトの特定のプロパティを評価するテストを実行しようとしています。実際の評価はペイ パー コール リソースによって処理されているため、リソースを生成する回数を最小限に抑えたいと考えています。また、これを JUnit で実行して、より大きな自動テスト スイートに適合させる必要があります。

これまでパラメータ化されたテストでこれを行ってきましたが、テスト メソッドごとに新しいインスタンスをインスタンス化することを知りました。

現在、テスト クラスのコンストラクターに供給されるパラメーターごとに 1 回だけリソースを作成する方法を見つけようとしています。@BeforeClass は 1 回だけ実行し、@Before は各テストの前に 1 回実行します。

私が見つけることができたすべてのヘルプ トピックは、すべてのテストに対して 1 回だけ高価なリソースを作成することを扱っていましたが、この場合、新しいパラメーター セットごとにリソースを再作成する必要があります。

私が探しているものをよりよく示すために、以下にいくつかのサンプルコード/出力を書きました:

@RunWith(Parameterized.class)
public class MyTestClass {

    private static Resource expensiveToCreateResource;

    public MyTestClass(String url) {
        System.out.println("Constructing resource for " + url);
        expensiveToCreateResource = new Resource(url); //This is getting created 4x, which is wrong
    }

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {{"url1"},{"url2"}});
    }

    @Test
    public test1() {
        expensiveToCreateResource.method1();
        System.out.println("test1");
    }

    @Test 
    public test2() {
        expensiveToCreateResource.method2();
        System.out.println("test2");
    }
}

出力が生成されます:

Constructing resource for url1
test1
test2
Constructing resource for url2
test1
test2

アイデア/解決策はありますか?ありがとう。

4

1 に答える 1

1

クラスをパラメーターごとに 1 回インスタンス化する場合は、独自の JUnit テスト ランナーを作成する必要があります。代わりに、必要に応じて情報をキャッシュしようとします。たとえば、URL をリソースにマップする静的マップなどです。

于 2013-07-07T06:01:09.470 に答える