在Adobe CQ5 CRXDE中编译引用Felix OSGI捆绑JUnit代码的单元测试



我想编写一些在Adobe CQ 5.4中运行的单元测试。我正在做本文中描述的CQ:中的测试

http://jtoee.com/2011/09/799/

然而,当我在Java代码中创建单元测试类后,它将不会在CRXDE中编译,因为它无法解析org.unit名称空间。如上所述,我在Felix中安装并激活了JUnit捆绑包(Apache Sling JUnit Core),但我猜我还需要做其他事情才能在CRXDE中找到这个活动的Felix捆绑包。我连接到的CQ5实例中的Felix捆绑包显示了这些导出的包:

junit.framework,version=4.8.2
org.apache.sling.junit,version=1.0.7.SNAPSHOT
org.apache.sling.junit.annotations,version=1.0.7.SNAPSHOT
org.junit,version=4.8.2
org.junit.matchers,version=4.8.2
org.junit.rules,version=4.8.2
org.junit.runner,version=4.8.2
org.junit.runner.manipulation,version=4.8.2
org.junit.runner.notification,version=4.8.2
org.junit.runners,version=4.8.2
org.junit.runners.model,version=4.8.2

在下面的这个示例单元测试代码中,最后三个导入语句"无法解析"

import org.apache.sling.api.resource.*;
import org.junit.*;
import org.junit.runner.*;
import org.apache.sling.junit.annotations.*;
@RunWith(SlingAnnotationsTestRunner.class)
public class MyUnitTest {
    public ResourceResolver getResourceResolver() {
        try {
            return getResourceResolverFactory().
                    getAdministrativeResourceResolver(null);
        } catch (LoginException e) {
            fail(e.toString());
        }
        return null;
    }
}

我的新手理解是,安装在Felix中的OSGI捆绑包应该可以访问,以便我使用CRXDE在Java类中引用,但我安装的JUnit捆绑包却没有这样做。为什么不呢?我需要做什么才能让CRXDE找到OSGI捆绑包引用并在CRXDE中编译?

您所做的乍一看是正确的。

安装所需的捆绑包后,您是否尝试重新启动CQ?理论上这不应该是必需的,但我想知道捆绑编译器是否正确地获取了新可用的包。

我上传了一个内容包,上面有一个类似的简单示例http://dl.dropbox.com/u/715349/cq5-examples/junit-tests-1.0.zip(md5 2915123ad581aa225bd531247ea02878),在新的CQ 5.4实例上安装此包后,示例测试通过http://localhost:4502/system/sling/junit/

你可能想试试我的样品,并与你的样品进行比较。

简短回答

问题不在于CQ,而在于CRXDE。CRXDE会自动下载并缓存本地机器上所需的jar文件,这样就不必不断地从CQ.中检索它们

如果您切换到"Package Explore"导航,然后展开项目"{SERVER}{PORT}{HASH}",您应该会看到一个名为Referenced Libraries的文件夹。右键单击并选择"构建路径">>"配置构建路径"。从那里,您可以将任何需要的依赖项添加到项目中。

长答案

CRXDE不是创建捆绑包的好工具。通过Eclipse等成熟的IDE创建捆绑包并将ApacheMaven用作构建工具要好得多。ApacheMaven可以自动管理您的依赖关系,对代码运行测试,并将测试依赖关系与运行时依赖关系分开。

这样,您就可以避免将不需要这样一个jUnit的依赖项加载到OSGi控制台中,并且可以更好地控制捆绑包的构建和部署方式。

Day提供了一个非常好的指南,可以帮助您使用Eclipse构建CQ项目。http://dev.day.com/docs/v5_2/html-resources/cq5_guide_developer/ch04s02.html

最新更新