TestNG - инъекция завершается неудачно при использовании любой аннотации @ Before *, но работает без - PullRequest
4 голосов
/ 25 июля 2011

Я хотел бы использовать аннотацию @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), тестовый сценарий не пройден, поскольку все введенные ресурсы имеют значение null (utx и em и некоторые другие классы, которые я хочу протестировать) .

Итак, я спрашиваю себя и вас, людей: что там не так?

С уважением, Себастьян

1 Ответ

2 голосов
/ 26 июля 2011

Методы @ Before * вызываются дважды. Также см. https://issues.jboss.org/browse/ARQ-104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577331#comment-12577331

Проверка того, являются ли какие-либо введенные ресурсы нулевыми в аннотированном методе, должна помочь. Теперь все отлично работает.

...