2014-01-30 5 views
0

Это тестовый класс: Я пытаюсь ввести объект Paper, а затем выполнить действие, чтобы проверить, не вступила ли инъекция или нет.Зависимость впрыска не работает в Arquillian Test

@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

Обратите внимание, что ftc является родительский модуль ftc-*. Этот проект организован конвенцией Maven.

ExcelProcessorTest класс расположен в ftc-test модуле: enter image description here

И Paper класс находится в ftc-ejb модуле:
enter image description here

Paper класс представляет собой простой объектный компонент:

/** 
* 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

Я понял это. В классе Paper я использовал некоторые другие классы, такие как Sentence.class, PaperIndex.class, но я не добавил их в метод addClasses(). Этот ссылочный класс не может быть найден, поэтому инъекция не удалась.

Как глупо я ...

1

Я наткнуться на одно и то же, для меня, используя @EJB вместо @Inject работал отлично ... просто, чтобы обеспечить подсказку, но не объясняет, почему.

Смежные вопросы