我有一堆集成测试需要在运行之前填充数据库。此任务大约需要30分钟,因此在每次测试之前运行它是不可行的。
我正在使用junit,我希望能够用一些东西注释这个类,以便在其他类开始之前运行并完成。这可能吗?
(我发现的大多数注释只适用于方法,例如@Rule)
答案 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”。