所以我正在尝试运行测试来评估不同网站的某些属性。实际评估由按次付费资源处理,因此我希望最小化生成资源的次数。此外,我需要在JUnit中运行以适应更大的自动化测试套件。
到目前为止,我一直在使用参数化测试,但我刚刚了解到他们为每个测试方法实例化了一个新实例。
现在,我正在尝试找出一种方法,为每个参数提供一次资源,这些参数将被输入到我的测试类的构造函数中。 @BeforeClass只做一次,@ Before在每次测试前都做了一次。
我能找到的所有帮助主题都涉及为所有测试创建一次昂贵的资源,但在这种情况下,我需要为每组新参数重新创建资源。
我在下面写了一些示例代码/输出,以便更好地展示我正在寻找的内容:
@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
任何想法/解决方案?感谢。
答案 0 :(得分:1)
如果你想让每个参数实例化一次类,你必须编写自己的JUnit测试运行器。相反,我会尝试根据需要缓存信息,例如在将URL映射到资源的静态映射中。