其他人之前的集成测试

时间:2013-08-30 14:14:56

标签: java junit integration-testing

我有一堆集成测试需要在运行之前填充数据库。此任务大约需要30分钟,因此在每次测试之前运行它是不可行的。

我正在使用junit,我希望能够用一些东西注释这个类,以便在其他类开始之前运行并完成。这可能吗?

(我发现的大多数注释只适用于方法,例如@Rule)

2 个答案:

答案 0 :(得分:0)

我过去通过向各个测试类添加设置和拆卸功能来完成此操作,并使用@BeforeClass@AfterClass进行注释。

@BeforeClass
public static void setupBeforeClass() {
    DatabasePopulater.populate();
}

@AfterClass
public static void tearDownAfterClass() {
    DatabasePopulater.dePopulate();
}

如果多个测试类需要完成相同的设置,则setup函数可以进行一种引用计数,以确保它们只在第一次调用时才能完成工作:

public class DatabasePopulater {
    AtomicInteger invocations = new AtomicInteger();
    ....

    public static void populate() {
        if (0 == ivocations.getAndIncrement()) {
            // Actually populate DB
        }
    }

    public static void dePopulate() {
        if (0 == ivocations.decrementAndGet()) {
            // Actually clear DB
        }
    }

答案 1 :(得分:0)

如果你使用像ant / gradle这样的东西来执行测试套件,你可以将db数据库分离成一个独立的java程序,然后在junit任务上有一个depends =“populateDB”。