JCR 存储库可用于 Junit 测试

Posted

技术标签:

【中文标题】JCR 存储库可用于 Junit 测试【英文标题】:JCR Repository available for Junit tests 【发布时间】:2011-11-04 18:24:33 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

TransientRepositoryMemoryFileSystem 和In-Memory PM 一起使用,或者使用可以处理H2 等内存数据库的数据库持久性管理器。

【讨论】:

【参考方案2】:

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

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

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

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

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

【讨论】:

【参考方案3】:

ModeShape 可以很容易地在单元测试中使用,对于单元测试,我们的In-Memory connector 和Disk connector 工作得很好并且非常快(并且每次测试后不需要清理内存)。我们的JcrEngineTest 展示了这是多么容易,每个方法在几行内配置和启动一个引擎实例。其中许多测试complete in under 100ms。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于JCR 存储库可用于 Junit 测试的主要内容,如果未能解决你的问题,请参考以下文章

junit是啥?

Eclipse中怎么使用junit测试

如何使用eclipse进行junit测试

Junit单元测试

JUnit

JUnit - 测试框架