在Adobe CQ5 CRXDE中编译单元测试,引用Felix OSGI包JUnit代码

时间:2012-01-16 17:42:40

标签: unit-testing osgi apache-felix cq5 crx

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

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

但是,在我的Java代码中创建单元测试类之后,它将无法在CRXDE中编译,因为它无法解析org.junit命名空间。我按照描述(Apache Sling JUnit Core)在Felix中安装并激活了JUnit包,但是我猜我还需要做一些事情才能在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语句“无法解析”。

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包,以便在我的Java类中使用CRXDE进行引用,但是我安装的JUnit包不会发生这种情况。为什么不?我需要做些什么才能让 CRXDE 找到OSGI包参考并在CRXDE中编译?

2 个答案:

答案 0 :(得分:2)

你正在做的事情看起来是正确的。

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

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

您可能想尝试我的样本并与您的样本进行比较。

答案 1 :(得分:2)

简答

问题不在于CQ,问题在于CRXDE。 CRXDE会自动在本地计算机上下载并缓存所需的jar文件,因此无需从CQ中不断检索它们。

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

长答案

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

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

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