1

我正在为我的数据库访问编写测试,并且倾向于通过破坏数据库文件,然后添加数据并运行测试来启动它们。(这是为了测试我的业务逻辑——我隐式信任 DataNucleus 代码。)

我的测试在第一次运行时一直通过,然后每次后续运行都失败了。这没有任何意义,除了我倾向于在 SBT 命令提示符下运行我的测试,它在一个非常长寿的 JVM 实例中运行所有内容。在某个时候,我添加了一个设置来分叉一个新的 JVM 进行测试,并且每次都开始工作。

我最终发现(我认为......)是 DataNucleus 已经为 JVM 初始化了自己并创建了一个缓存和一个环境视图。当我删除数据库文件时,系统无法知道它需要重新初始化和重新创建所有内容,因为 JVM 并没有停止,它也没有理由知道我在背后改变了一些东西。

显然,为测试分叉一个新的 JVM 解决了这个问题,但我想知道是否有一个不太极端的解决方案。基本上,有没有办法告诉 DataNucleus 系统重新初始化?最干净的东西可能是shutdown()我可以在单元测试结束时调用的一种方法,但是类似于reinitialize()reload()我可以在开始时调用的方法也可以。

我确实尝试close()过调用 ,PersistenceManagerFactory但这似乎并没有忘记足够的东西。

4

1 回答 1

1

关闭并创建一个新的 PMF 对我有用,因为它创建了一个新的 StoreManager,它创建了一个到数据存储(无论它在哪里)的连接池。该日志将告诉您与数据存储的连接在哪里开始和结束,以及连接池在哪里初始化

于 2013-08-02T07:02:22.837 回答