【发布时间】:2013-07-31 05:19:54
【问题描述】:
我想测试一些来自 alfresco 模块 (AMP) 项目的类。 该项目基于maven 3。
我对 Alfresco 和 Maven 很陌生,所以请耐心等待... :) 文件夹 src/main/java 包含模块的所有类。 现在我在 src/test/java 中创建了一个测试类,其包与我要测试的类相同。 测试类扩展了 BaseAlfrescoTestCase 类。
我将 JUnit 4.11 添加到 POM 依赖项中。
执行mvn clean integration-test -P webapp 遇到异常,找不到application-context.xml:
测试运行:1,失败:0,错误:1,跳过:0,经过的时间:0.189 秒
显然 BaseAlfrescoTestCase.setUp 方法无法从 Spring Framework 获取注入的属性(如 serviceRegistry 等...)。
application-context.xml 实际上并不存在,但不幸的是我不知道如何设置一个适当的 application-context.xml 用于测试目的。
我认为应用程序上下文是由码头提供的?
pom.xml 最初是由一位同事配置的,现在无法联系到他。
当我跳过测试时,Jetty 正常启动:
mvn clean -Dmaven.test.skip=true integration-test -P webapp
我搜索了很多,但没有找到很多 Alfresco 结合 Maven 和 Junit 的教程。我发现的所有教程都不适合我... 感谢您的帮助
编辑: 这是我的 pom.xml 中的所有依赖项:
<dependencies>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-core</artifactId>
<version>4.0.b</version>
<scope>provided</scope>
<classifier>community</classifier>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-repository</artifactId>
<version>4.2.c</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-datamodel</artifactId>
<version>4.2.c</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-web-client</artifactId>
<version>4.2.c</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.0.5.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.0.5.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.opensymphony.quartz</groupId>
<artifactId>com.springsource.org.quartz</artifactId>
<version>1.6.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.extensions.surf</groupId>
<artifactId>spring-webscripts</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.log4j</groupId>
<artifactId>com.springsource.org.apache.log4j</artifactId>
<version>1.2.16</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.0.1b</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>com.springsource.javax.mail</artifactId>
<version>1.4.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
编辑:
after adding application-context.xml, application-context-core.xml and a fake-context folder to resource folder in the maven project this error occurs:
testCreateinitialSpaces(AlfrescoTest) Time elapsed: 0.56 sec <<< ERROR!
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ServiceRegistry' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1075)
at org.alfresco.util.BaseAlfrescoTestCase.setUp(BaseAlfrescoTestCase.java:105)
显然 ServiceRegistry Bean 不可用?!
编辑:
我将完整的 Alfresco 文件夹从 <WAR>/WEB-INF/classes/alfresco 复制到 src/test/resources。实际上不再缺少任何 XML 文件,但测试失败并出现 CannotLoadBeanClassException:
org.springframework.beans.factory.CannotLoadBeanClassException:找不到类路径资源 [alfresco/cache-context.xml] 中定义的名称为“internalEHCacheManager”的 bean 的类 [org.alfresco.repo.cache.InternalEhCacheManagerFactoryBean];嵌套异常是 java.lang.ClassNotFoundException: org.alfresco.repo.cache.InternalEhCacheManagerFactoryBean 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247) 在 org.springframework.util.ClassUtils.forName(ClassUtils.java:257) 在 org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1271) 在 org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1242) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576) 在 org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1319) 在 org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:885) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:93) 在 org.alfresco.util.BaseApplicationContextHelper.getApplicationContext(BaseApplicationContextHelper.java:67) 在 org.alfresco.util.ApplicationContextHelper.getApplicationContext(ApplicationContextHelper.java:46) 在 org.alfresco.util.BaseAlfrescoTestCase.setUpContext(BaseAlfrescoTestCase.java:84) 在 org.alfresco.util.BaseAlfrescoTestCase.setUp(BaseAlfrescoTestCase.java:102)
【问题讨论】:
-
我的第一个猜测是您没有包含所有需要的 Alfresco。您能否告诉我们您在 pom 中依赖的 Alfresco 的哪些部分以及版本是什么?
-
感谢您的回复。抱歉,所有依赖项都太长,无法发表评论...请参阅我帖子上的编辑
-
您似乎混合了 Alfresco 版本 - 一些 4.0.d 和一些 3.4.e。你可能想先解决这个问题!
-
好的,谢谢您的提示。我已经更新了 3.4.e 源。请在我的原始帖子中找到新的依赖项。不幸的是,测试期间的错误仍然存在......我不明白,为什么我必须将“-SNAPSHOT”添加到 alfresco-data-model 和 alfresco-web-client 依赖项中。如果我不添加 SNAPSHOT,maven 无法解决依赖关系。 alfresco-core 依赖显然不需要任何添加。
-
你为什么使用 3.4.e?很古老! maven 支持目前仍处于 WIP 中,因此您将有更多机会使用更新的支持(例如来自 4.1 企业或 4.2 社区的支持)
标签: spring maven junit4 alfresco