如何在JUnit中示例化共享资源

vh0rcniy  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(128)

我注意到jUnit为每个被测试的方法运行我的测试类的构造函数。

public class TestTest {
    protected BigUglyResource bur;
    public TestTest(){
        bur=new BigUglyResource();
        System.out.println("TestTest()");
    }
    @Test
    public void test1(){
        System.out.printf("test1()\n");
    }

    @Test
    public void test2(){
        System.out.printf("test2()\n");
    }
    @Test
    public void test3(){
        System.out.printf("test3()\n");
    }
}

给出以下结果:

TestTest()
test1()
TestTest()
test2()
TestTest()
test3()

调用BigUglyResource的构造函数太耗时了,我宁愿只构建一次。我知道你可以使用@BeforeClass来运行一个方法一次,但是@BeforeClass只适用于静态方法。静态方法不能访问像上面例子中的BigUglyResource这样的类属性。除了构建一个Singleton,还有什么选择?

q3qa4bjr

q3qa4bjr1#

你不能声明BigUglyResource为静态吗?这是我通常的做法。

private static BigUglyResource bur;

@BeforeClass
public static void before(){
   bur=new BigUglyResource();
}
4si2a6ki

4si2a6ki2#

您可以使“bur”成为静态:

protected static BigUglyResource bur;

并使用@BeforeClass。

iecba09b

iecba09b3#

对于JUnit5用户:您必须使用@BeforeAll注解而不是@BeforeEach,其余内容与Bruno和Russ的答案相同。

private static BigUglyResource bur;

@BeforeAll
public static void before(){
   bur=new BigUglyResource();
}

相关问题