我正在爲我的數據庫訪問編寫測試,並傾向於通過銷燬數據庫文件,然後添加數據並運行測試來啓動它們。 (這是爲了測試我的業務邏輯 - 我隱式地信任DataNucleus代碼。)如何在單個JVM運行中重新啓動DataNucleus?
我的測試不停地傳遞第一次運行,然後每次後續運行都失敗。這是沒有意義的,除了我傾向於在SBT命令提示符下運行我的測試,它在一個非常長壽命的JVM實例中運行一切。在某個時候,我添加了一個設置來爲測試分叉一個新的JVM,並且每次都開始工作。
我終於明白了(我認爲......)是DataNucleus爲JVM初始化了自己,並創建了緩存和環境視圖。當我刪除數據庫文件時,系統無法知道它需要重新初始化和重新創建所有內容,因爲JVM並沒有停下來,也沒有理由知道我已經改變了背後的東西。
顯然,分叉測試解決了這個問題,但我想知道是否有一個不太極端的解決方案。基本上,有沒有辦法讓DataNucleus系統重新初始化?最乾淨的東西大概是我在單元測試結束時可以調用的一種方法,但是我可以在開始時調用的reinitialize()
或reload()
也可以。
我曾嘗試致電close()
對PersistenceManagerFactory
,但這似乎並沒有忘記足夠的東西。
我改變了我的測試夾具以使用'SchemaAwareStoreManager.delete'和'create',現在一切似乎都奏效。不幸的是,我同時改變了一些其他的東西,所以目前還不清楚我是不是正確地關閉了「PersistenceManagerFactory」,或者我正在做其他事情。無論如何,關閉'PersistenceManagerFactory'確實有效。謝謝! – TOB