2016-11-10 7 views
1

У меня есть некоторые тесты dao, которые я хочу выполнить с помощью пакета testng Я инициализирую все daos в @BeforeSuite, но только первый тест может использовать даос, другие тесты генерируют nullpointer при вызове daotestng suite second test fail -> nullpointerexception

Любая помощь будет оценена Спасибо большое

Базовый тест:

public class BaseTest { 

    protected DocumentDaoImpl documentDao; 
    protected UserDaoImpl userDao; 


    @BeforeSuite 
    public void beforeSuite() { 
     EntityManagerUtil.setPersistenceUnitName("db_test"); //initialize entityManagerFactory once for all tests as well as daos 
     documentDao = DAOFactory.getDocumentDAO(); 
     userDao = DAOFactory.getUserDao(); 
    } 

    @AfterSuite 
    public void afterSuite() { 
    EntityManagerUtil.closeEntityManagerFactory(); 
    } 
} 

тест 1:

public class DocumentDaoImplTest extends BaseTest{ 

    @Test(dataProviderClass = DocumentDataProvider.class, dataProvider = DocumentDataProvider.ONE_DOCUMENT_PROVIDER) 
    public void findByMatricule(Document document) { 
     documentDao.create(document); 
     Document result = documentDao.findByMatricule(document.getMatricule()); 
     Assert.assertNotNull(result); 
     Assert.assertEquals(result.getMatricule(), document.getMatricule()); 
    } 
} 

Тест 2:

public class UserDaoImplTest extends BaseTest{ 

    @Test(dataProviderClass = UserDataProvider.class, dataProvider = UserDataProvider.ONE_USER_PROVIDER) 
    public void findByDocumentId(User user) { 
     // nullpointer userDao 
     userDao.create(user); 
     User result = userDao.findByDocumentId(user.getDocumentId()); 
     Assert.assertNotNull(result); 
     Assert.assertEquals(result.getDocumentId(), user.getDocumentId()); 
    } 

} 

testng.xml

<test name="DAOTest"> 
    <packages> 
     <package name="com.dev.test.dao"/> 
    </packages> 
</test> 

StackTrace:

java.lang.NullPointerException 
    at com.dev.test.dao.UserDaoImplTest.findByDocumentId(UserDaoImplTest.java:14) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) 
    at org.testng.TestRunner.privateRun(TestRunner.java:782) 
    at org.testng.TestRunner.run(TestRunner.java:632) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:268) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169) 
    at org.testng.TestNG.run(TestNG.java:1064) 
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81) 

Что я делаю неправильно? тесты работает, если работают независимо, терпит неудачу только тогда, когда я бегу сразу

Большое спасибо

+0

Вы должны предоставить стек этого исключения. В другом случае вам будет сложно помочь. – Krzysiek

+0

@ Krzysiek. Готово . Спасибо – ulquiorra

ответ

3

Вы должны переработать тесты:

@BeforeSuite вызывается только один раз люкс. У вас есть 2 класса, тогда у первого есть дао, а у другого нет (NPE в этом случае).

Один из вариантов заключается в использовании static для вашего dao. Другим решением может быть помещение documentDao = DAOFactory.getDocumentDAO(); в @BeforeClass. Но вы можете найти много других (лучших) решений.

+0

Большое спасибо. Статические и @BeforeClass работают как – ulquiorra

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