我成功地使用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