我一直在尝试为我的一个Java类编写一个JUnit测试用例,该类创建一个在CQ中具有一些给定属性的页面。对于它,它需要获得SlingRepository和ResourceResolverFactory的引用。我正在使用this来了解如何实现这一目标。在文档中,它说“http:// $ HOST:$ PORT / system / sling / junit /”路径的POST用于在服务器端执行测试。但在CQ中,这条路径出现了404错误。
CQ中是否有替代URL?或者真的很感激,如果有人能提出更好的方法吗?
由于
答案 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测试运行器有许多优点,所以我推荐这种方法。
一些潜在的考虑因素: