我需要为基于Maven应用程序编写基于JBehave的UAT。测试已执行,但@Injected类未初始化,则测试开始。
我像这样使用jbehave maven-plugin:
<plugin>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-maven-plugin</artifactId>
<version>4.1.1</version>
<executions>
<execution>
<id>unpack-view-resources</id>
<phase>pre-integration-test</phase>
<goals>
<goal>unpack-view-resources</goal>
</goals>
</execution>
<execution>
<id>embeddable-stories</id>
<phase>integration-test</phase>
<configuration>
<includes>
<include>**/*Stories.java</include>
</includes>
<ignoreFailureInStories>true</ignoreFailureInStories>
<ignoreFailureInView>true</ignoreFailureInView>
</configuration>
<goals>
<goal>run-stories-as-embeddables</goal>
</goals>
</execution>
</executions>
</plugin>当我在测试中使用CDI时,我需要初始化weld,所以它可以与测试一起工作。但是CDI的初始化没有发生,并且我得到了带有测试代码的NPE。
我声明了如下依赖关系:
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-weld</artifactId>
<version>4.1</version>
<exclusions>
<exclusion>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-maven-plugin</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-core</artifactId>
<version>2.3.5.Final</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>要在测试开始之前初始化CDI,必须做些什么?
发布于 2017-09-05 04:06:51
首先,您使用的是“过时”版本的CDI。该规范有一个全新的版本,CDI 2.0。请随意使用它。已经完成了一个实现-- Weld version 3.0。作为替代,您可以使用ApacheCDI2.0,这是已经支持CDI2.0的OpenWebBeans的另一个实现。
不管怎样,回到你的问题上。你没有提到你要实现什么样的测试。如果您想使用依赖项注入进行测试,只需编写一个提供所有依赖项的JUnit运行器。有一个nice tutorial可以做到这一点。在该教程中,您可以看到以下代码片段:
package com.memorynotfound.cdi.test;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;
public class WeldJUnit4Runner extends BlockJUnit4ClassRunner {
public WeldJUnit4Runner(Class<Object> clazz) throws InitializationError {
super(clazz);
}
@Override
protected Object createTest() {
final Class<?> test = getTestClass().getJavaClass();
return WeldContext.INSTANCE.getBean(test);
}
}用@RunWith(WeldJUnit4Runner.class)注释你的测试,你就有了测试中的依赖注入功能。
https://stackoverflow.com/questions/46034691
复制相似问题