【问题标题】:CQ - Writing Server-side JUnit testsCQ - 编写服务器端 JUnit 测试
【发布时间】:2013-12-30 23:12:53
【问题描述】:

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

在 CQ 中是否有任何替代 URL?或者如果有人能提出更好的方法,我会非常感激?

谢谢

【问题讨论】:

    标签: unit-testing osgi aem sling


    【解决方案1】:

    一种方法是使用 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 项目

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多