1

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

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

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

4

2 回答 2

0

如果您使用 ant/gradle 之类的东西来执行测试套件,您可以将 db 填充分离到一个独立的 java 程序中,然后在 junit 任务上有一个depends="populateDB"。

于 2013-08-31T12:19:52.063 回答
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
        }
    }
于 2013-08-30T14:35:04.943 回答