我正在为我的数据库访问编写测试,并且倾向于通过破坏数据库文件,然后添加数据并运行测试来启动它们。(这是为了测试我的业务逻辑——我隐式信任 DataNucleus 代码。)
我的测试在第一次运行时一直通过,然后每次后续运行都失败了。这没有任何意义,除了我倾向于在 SBT 命令提示符下运行我的测试,它在一个非常长寿的 JVM 实例中运行所有内容。在某个时候,我添加了一个设置来分叉一个新的 JVM 进行测试,并且每次都开始工作。
我最终发现(我认为......)是 DataNucleus 已经为 JVM 初始化了自己并创建了一个缓存和一个环境视图。当我删除数据库文件时,系统无法知道它需要重新初始化和重新创建所有内容,因为 JVM 并没有停止,它也没有理由知道我在背后改变了一些东西。
显然,为测试分叉一个新的 JVM 解决了这个问题,但我想知道是否有一个不太极端的解决方案。基本上,有没有办法告诉 DataNucleus 系统重新初始化?最干净的东西可能是shutdown()
我可以在单元测试结束时调用的一种方法,但是类似于reinitialize()
或reload()
我可以在开始时调用的方法也可以。
我确实尝试close()
过调用 ,PersistenceManagerFactory
但这似乎并没有忘记足够的东西。