4

我想@Inject在我的 TestNG 测试用例中使用注释。该测试由 Arquillian 在远程 JBoss AS 6 实例中执行。测试基本上是这样的:

测试用例

public class WorksheetControllerTest extends Arquillian {

    @PersistenceContext
    @Produces
    @Default
    EntityManager em;

    @Inject
    private UserTransaction utx;

    @Deployment
    public static WebArchive createTestArchive() {
        return ShrinkWrap
            .create( WebArchive.class, "test.war" )
            .addClasses( SomeClass.class )
            .addAsWebInfResource( new ByteArrayAsset( "<beans />".getBytes() ), ArchivePaths.create( "beans.xml" ) )
            .addAsResource( "persistence-test.xml", "META-INF/persistence.xml");
    }

    //@BeforeClass
    //@BeforeTest
    @BeforeMethod
    public void initTestData() throws Exception {
        // ...

        utx.begin();
        em.persist( someEntity );
        utx.commit();        
    }

    @Test
    public void testGetEmployeeFromTimesheet() throws Exception {
    // ...        
   }
}

工作时...

initTestData()如果我在单个测试方法中手动调用该方法,我已经正确注入了资源来使用。

不工作时...

如果我使用上面给出的任何注释(@BeforeClass, @BeforeTest, @BeforeMethod),测试用例将失败,因为所有注入的资源都是空的(utx 和 em 以及我想测试的其他一些类)。

所以,我在问自己和你们:那里出了什么问题?

亲切的问候,塞巴斯蒂安

4

1 回答 1

3

@Before* 方法似乎被调用了两次。另请参阅https://issues.jboss.org/browse/ARQ-104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577331#comment-12577331

检查带注释的方法中是否有任何注入的资源为空应该可以解决问题。现在一切正常。

于 2011-07-26T08:40:09.190 回答