依赖注入在Arquillian测试中不起作用

时间:2014-01-30 12:05:13

标签: java java-ee seam jboss-arquillian

这是测试类: 我尝试注入一个Paper对象然后执行操作以测试注入是否失败。

@RunWith(Arquillian.class)
public class ExcelProcessorTest {
    // Not work. Because Paper and ExcelProcessorTest are in different modules?
    @Inject
    private Paper paper;

    @Deployment
    public static JavaArchive createDeployment() {
        JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "test.jar")
                .addClasses(Paper.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
        System.out.println(jar.toString(true));

        return jar;
    }

    @Test
    public void notNullTest() {
        Assert.assertNotNull(paper); // paper is null here.
    }

}

我一直致力于一个名为ftc的项目,这是ftc的结构:
enter image description here

请注意,ftcftc-*的父模块。该项目由Maven大会组织。

ExcelProcessorTest类位于ftc-test模块中: enter image description here

Paper课程位于ftc-ejb模块中:
enter image description here

Paper class是一个简单的实体bean:

/**
 * Paper generated by hbm2java
 */
@Entity
@Table(name = "paper")
public class Paper implements java.io.Serializable {

    private Integer id;
    private String title;
    private String author;
    private String journal;
    private String volumn;
    private String pages;
    private String alternateJournal;
    private String issn;
    private String doi;
    private String acccessionNumber;
    private String keywords;
    private String abstract_;
    private Integer timesCited;
    private Integer citedReferenceCount;
    private String citedReferenceName;
    private String website;
    private String pdfPath;
    private String issue;
    private Integer paperIndexId;
    private Integer year; // 论文发表的年份
    private String type; // OVERVIEW, EXCEL, PAPER
    private SourceFile sourceFile;
    private Set<PaperIndex> paperIndexes = new HashSet<PaperIndex>(0);
    private Set<Sentence> sentences = new HashSet<Sentence>(0);

    public Paper() {
    }

有人可以告诉我注射失败的原因吗?

哦,我现在有事要做。我会在几个小时后回到这里。如果您需要任何细节,请发表评论。感谢。

2 个答案:

答案 0 :(得分:2)

我已经弄明白了。 在Paper课程中,我使用了其他一些课程,例如Sentence.classPaperIndex.class,但我没有在addClasses()方法中添加它们。无法找到此引用的分类,因此注射失败。

我多么愚蠢......

答案 1 :(得分:2)

我在同样的事情上磕磕绊绊,因为我使用@EJB代替@Inject完美地完成了...只是提供一个提示,但没有解释原因。