Unit testing 在Adobe CQ5 CRXDE中编译引用Felix OSGI bundle JUnit代码的单元测试

Unit testing 在Adobe CQ5 CRXDE中编译引用Felix OSGI bundle JUnit代码的单元测试,unit-testing,osgi,apache-felix,aem,crx,Unit Testing,Osgi,Apache Felix,Aem,Crx,我想写一些在AdobeCQ5.4中运行的单元测试。我正在做本文中描述的在CQ中进行测试: 但是,在Java代码中创建单元测试类之后,它将不会在CRXDE中编译,因为它无法解析org.junit名称空间。我按照描述在Felix中安装并激活了JUnit包(ApacheSling JUnit Core),但是我猜为了在CRXDE中找到这个活动的Felix包,我还需要做其他事情。我连接到的CQ5实例中的Felix包显示了这些导出的包: junit.framework,version=4.8.2 org

我想写一些在AdobeCQ5.4中运行的单元测试。我正在做本文中描述的在CQ中进行测试:

但是,在Java代码中创建单元测试类之后,它将不会在CRXDE中编译,因为它无法解析org.junit名称空间。我按照描述在Felix中安装并激活了JUnit包(ApacheSling 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
在下面的单元测试代码示例中,最后三条导入语句“无法解析”


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

您所做的乍一看是正确的

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

我在(md5 2915123ad581aa225bd531247ea02878)上传了一个包含类似简单示例的内容包,在一个新的CQ 5.4实例上安装此包后,通过


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

您所做的乍一看是正确的

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

我在(md5 2915123ad581aa225bd531247ea02878)上传了一个包含类似简单示例的内容包,在一个新的CQ 5.4实例上安装此包后,通过


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

简短回答

问题不在于CQ,而在于CRXDE。CRXDE会自动下载并缓存本地计算机上所需的jar文件,这样就不必经常从CQ检索这些文件

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

长答案

CRXDE不是创建捆绑包的好工具。最好通过一个成熟的IDE(如Eclipse)创建捆绑包,并将ApacheMaven用作构建工具。ApacheMaven可以自动管理依赖项,对代码运行测试,并将测试与运行时依赖项分开

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

Day提供了一个非常好的指南,帮助您使用Eclipse构建CQ项目。
简短回答

问题不在于CQ,而在于CRXDE。CRXDE会自动下载并缓存本地计算机上所需的jar文件,这样就不必经常从CQ检索这些文件

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

长答案

CRXDE不是创建捆绑包的好工具。最好通过一个成熟的IDE(如Eclipse)创建捆绑包,并将ApacheMaven用作构建工具。ApacheMaven可以自动管理依赖项,对代码运行测试,并将测试与运行时依赖项分开

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

Day提供了一个非常好的指南,帮助您使用Eclipse构建CQ项目。

谢谢你把这些放在一起!在安装/激活ApacheSling JUnit核心包之后,我尝试重新启动CQ,但仍然无法编译测试类。我查看了这个示例代码,我能看到的最大一点是apps/junit tests/install上的“install”目录,其中包含两个显然是手动添加的.jar文件(除了动态添加的com.example.junit tests.jar):junit-4.8.2.jar、org.apache.sling.junit.core-1.0.6.jar。如果我已经将JUnit捆绑包安装到Felix中,我真的需要在我的单元测试捆绑包中包含这两个额外的.jar吗?测试需要这两个额外的捆绑包,所以如果它们还没有激活(或者如果是您拥有的旧版本),您需要添加它们。感谢您将这两个捆绑包放在一起!在安装/激活ApacheSling JUnit核心包之后,我尝试重新启动CQ,但仍然无法编译测试类。我查看了这个示例代码,我能看到的最大一点是apps/junit tests/install上的“install”目录,其中包含两个显然是手动添加的.jar文件(除了动态添加的com.example.junit tests.jar):junit-4.8.2.jar、org.apache.sling.junit.core-1.0.6.jar。如果我已经将JUnit捆绑包安装到Felix中,我真的需要在我的单元测试捆绑包中包括这两个额外的.jar吗?测试需要这两个额外的捆绑包,所以如果它们还没有激活(或者如果是您已有的较旧版本),您需要添加它们。我可以按照您的方式添加引用
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;
    }
}