我有一堆集成测试需要在运行之前填充数据库。此任务大约需要 30 分钟,因此在每次测试之前运行它是不可行的。
我正在使用junit,我希望能够用一些东西注释这个类,以便它在其他类开始之前运行和完成。这可能吗?
(我发现的大多数注释只适用于方法,例如@Rule)
我有一堆集成测试需要在运行之前填充数据库。此任务大约需要 30 分钟,因此在每次测试之前运行它是不可行的。
我正在使用junit,我希望能够用一些东西注释这个类,以便它在其他类开始之前运行和完成。这可能吗?
(我发现的大多数注释只适用于方法,例如@Rule)
如果您使用 ant/gradle 之类的东西来执行测试套件,您可以将 db 填充分离到一个独立的 java 程序中,然后在 junit 任务上有一个depends="populateDB"。
过去,我通过向单个测试类添加设置和拆卸函数来完成此操作,并使用@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
}
}