我有一堆集成測試需要在運行之前填充數據庫。這項任務大約需要30分鐘,所以在每次測試之前運行它是不可行的。在別人之前進行集成測試
我使用的是junit,我希望能夠用一些東西來註釋這個類,以便在其他人開始之前運行並完成。這可能嗎?
(大部分註釋我發現只有在方法的工作,例如@rule)
我有一堆集成測試需要在運行之前填充數據庫。這項任務大約需要30分鐘,所以在每次測試之前運行它是不可行的。在別人之前進行集成測試
我使用的是junit,我希望能夠用一些東西來註釋這個類,以便在其他人開始之前運行並完成。這可能嗎?
(大部分註釋我發現只有在方法的工作,例如@rule)
我已經在過去通過增加安裝和拆卸功能個別測試類,與@BeforeClass
和@AfterClass
註釋做到了這一點。
@BeforeClass
public static void setupBeforeClass() {
DatabasePopulater.populate();
}
@AfterClass
public static void tearDownAfterClass() {
DatabasePopulater.dePopulate();
}
如果有多個測試類需要相同的設置來進行,設置功能可以做一種引用計數,以確保他們只做好自己的工作,在第一時間,它被稱爲:
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
}
}
這就是我目前正在做的事情(從一個抽象類,所有的集成測試繼承而來)...我正在尋找一些不涉及管理併發的更乾淨的東西。 – fommil
如果你使用類似ant/gradle的東西來執行測試套件,你可以將db數據分成獨立的java程序,然後在junit任務上有一個depends =「populateDB」。
謝謝。該解決方案必須在IntelliJ,Eclipse和高度定製的企業ant框架(我無法控制)中工作。 – fommil
我認爲集成測試不應該測試你的整個填充數據。集成測試通常應該在開始時創建自己的測試數據,並在測試完成後進行清理。對預填充數據進行回覆的集成測試非常難以維護。我認爲你只需要構建你的模式,並且每個測試都應該創建自己的小數據集供自己使用,並在測試完成後進行清理。 – KKKCoder
@KZhang這是進行測試所需的最小數據集,不可能根據各種原因來做你正在說的內容(我可以做你在說什麼的時候......確實看到我爲Scala設備製作的akka-patterns貢獻完全是這樣)。 – fommil