我成功地使用Arquillian对(旧的)Glassfish 3.1嵌入式运行EJB测试 .
在尝试@Inject焊接bean时,当我想在传递注入的Weld bean中解决方法时,我得到一个NPE .
所以,我正在测试EJB A. EJB A有一个EJB B的参考.EJB有一个对一个Weld bean的引用 .
这是Jar init .
@Deployment
public static Archive<?> createDeployment() {
return ShrinkWrap.create(JavaArchive.class, "itscool.jar")
.addClasses(DashboardService.class, PropertyService.class, StorageService.class, EPSRepository.class,
EmailService.class, NotificationRepository.class, EmailRepository.class, Configuration.class,
MailingList.class, BogusBean.class, Bogus.class)
.addAsManifestResource("META-INF/persistence.xml", "persistence.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "META-INF/beans.xml")
.addAsResource(new File("src/test/resources/csman.properties"), "csman.properties");
}
因此,注入的bean是Configuration.class . 首先,我认为Configuration impl类中存在一些初始化错误,因此我创建了@Bogus和BogusBean以仅测试注入 . 我得到了同样的错误 .
@Bogus
public class BogusBean {
public void setIt(){
}
}
和资格赛
@Documented
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Bogus {
}
并在EmailService中注入(@stateless会话bean) .
@Inject
@Bogus
private BogusBean bogus;
@EJB
private EmailRepository emailRepos;
@PostConstruct
public void init() {
bogus.setIt();
}
NPE发生在bogus.setIt()行上 . as bogus == null .
这是maven配置
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<version>1.1.11.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.core</groupId>
<artifactId>arquillian-core-api</artifactId>
<version>1.1.11.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.weld.arquillian.container</groupId>
<artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
<version>1.1.2.Final</version>
</dependency>
我为嵌入的glassfish添加了一个配置文件
<profile>
<id>arquillian-glassfish-embedded</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-embedded-3.1</artifactId>
<version>1.0.0.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.2.2</version>
<!-- was 4.0 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.23.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.23.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
我也尝试从焊接到焊接,但是容器甚至没有启动 . (如此处所述):how-to-test-ejb-method-call-with-arquillian-weld-ee-embedded