CQ - 编写服务器端JUnit测试

时间:2013-12-12 13:46:05

标签: unit-testing osgi cq5 sling aem

我一直在尝试为我的一个Java类编写一个JUnit测试用例,该类创建一个在CQ中具有一些给定属性的页面。对于它,它需要获得SlingRepository和ResourceResolverFactory的引用。我正在使用this来了解如何实现这一目标。在文档中,它说“http:// $ HOST:$ PORT / system / sling / junit /”路径的POST用于在服务器端执行测试。但在CQ中,这条路径出现了404错误。

CQ中是否有替代URL?或者真的很感激,如果有人能提出更好的方法吗?

由于

1 个答案:

答案 0 :(得分:4)

一种方法是使用Sling测试运行器通过浏览器执行JUnit测试。这是你提到的方法。我们必须首先在此JAR(org.apache.sling.junit.core)中安装代码,以添加允许您列出的URL工作的代码。一旦该代码存在,此URL将允许您使用测试运行器的内置页面运行测试以运行/显示测试:http://localhost:4502/system/sling/junit/)。我的团队已经做了一段时间,但我们很快就转向了另一种方法 - 使用Intellij IDE开发CQ的Java代码并编写JUnit测试,然后使用内置的JUnit测试运行器在IDE中执行它们。相同的方法适用于Eclipse。对于我们的团队来说,这种方法非常出色,因为它允许开发人员在IDE中保持上下文,而无需切换到浏览器来运行测试。

关键是能够解析对通过CQ安装/可用的类的引用,例如SlingRepository和ResourceResolverFactory类 - 以及我们常用的其他东西,例如Resource,ResourceResolver,Node和Session类。我们使用CQ扩展(http://helpx.adobe.com/experience-manager/kb/HowToUseCQ5AsMavenRepository.html)来允许我们的CQ实例充当Maven存储库。这允许我们导出CQ JAR,这样我们就可以在我们创建的Java项目中将它们作为依赖项引用,只要我们可能需要使用CQ本身提供的一些类。

一旦我们设置了项目依赖项,我们就可以在Intellij IDE中编写代码和相应的单元测试。我们能够在IDE中运行测试,允许开发人员保持上下文并处理将在CQ中运行的代码,就像他们处理任何Java代码一样(包括在调试模式下运行测试或使用代码覆盖,运行单个测试,在类中运行所有测试,使用键盘快捷键启动测试等)。对我们来说,这种方法比基于浏览器的Sling测试运行器有许多优点,所以我推荐这种方法。

一些潜在的考虑因素:

  • 从CQ导出为Maven回购可能不是最佳性能 - 您可能希望将内容添加到您自己的Maven仓库以便更快地访问
  • 您可能希望编写某些步骤的脚本,因此添加项目依赖项不是手动过程,而是通过自动过程完成的事情
  • 您甚至可以导出所有 CQ JAR - 或添加一些脚本来解析并重新打包公共类 - 并使任何CQ类可用于您的Java项目