4

我有一个通过 JCR API 访问内容存储库的代码。我的代码正在 OSGI 环境中开发。我想要的是有一个 JCR 内容存储库,无论环境如何,它都应该在运行单元测试时可用。我的意思是它应该可供构建项目的任何用户使用。我不想依赖在不同虚拟机中运行的某些外部内容存储库。

有可能做这样的事情吗?提前致谢。

4

4 回答 4

4

您还可以查看 Jackrabbit 实现提供的瞬态存储库。(假设您使用的是 Jackrabbit 实现)瞬态存储库是

当第一个会话打开或最后一个会话关闭时,自动初始化和关闭底层存储库实例的存储库代理。- API 文档

请看这里的例子——创建它的实例真的很容易。由于它是本地存储库,因此您永远不需要通过网络。

我通常在setUpClass/BeforeClass 钩子中为每个 JUnit 测试类创建一个临时存储库和一个会话, 并在所有测试用例中重用它,在每次之后清理会话(例如,删除我在测试用例期间添加的节点等)测试用例。

然而,使用临时存储库的一个缺点是它会在您的基本目录中创建几个特定于存储库的文件/目录。如果您使用的是 maven,那么您可以使用maven-clean-plugin来清理不需要的文件作为解决方案。

于 2011-08-31T03:28:47.490 回答
2

Apache Sling 的RepositoryTestBase类提供了一个可用于“单元”测试的存储库。它确实有一些 Sling 依赖项,因此您可能无法按原样使用它,但这可能是一个很好的起点。

于 2011-08-27T08:07:25.647 回答
0

ModeShape 可以很容易地在单元测试中使用,对于单元测试,我们的内存连接器磁盘连接器工作得很好并且非常快(并且每次测试后不需要清理内存)。我们的JcrEngineTest展示了这是多么容易,每个方法在几行内配置和启动一个引擎实例。其中许多测试在 100 毫秒内完成

于 2011-08-29T14:26:35.667 回答
0

将 aTransientRepository与 aMemoryFileSystemIn-Memory PM或数据库持久性管理器一起使用,它可以处理内存中的数据库,如H2

于 2011-09-15T14:18:42.370 回答