2016-11-10 10 views
1

私は私が@BeforeSuite内のすべてのDAOSを初期化していますが、唯一の最初のテストはDAOSを使用することができ、DAOを呼び出すときに、他のテストはnullポインタを生成TestNGのスイート を使用して実行するいくつかのDAOのテストを持っていますTestNGのスイート秒テスト失敗 - > 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> 

スタックトレース:

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) 

私は間違っていますか?

@BeforeSuiteだけスイートによって1回呼び出されます:。 テストは独立して実行する場合、私はあなたのテストを手直しする必要が非常に多く

+0

例外のスタックを提供する必要があります。それ以外の場合は、あなたを助けるのが難しいでしょう。 @Krzysiek。 – Krzysiek

+0

完了しました。ありがとうございます – ulquiorra

答えて

3

をありがとうすべてを一度

実行したときに、唯一失敗した作品 あなたは2つのクラスを持っていますが、最初のインスタンスはインスタンス化されていますが、もう1つはインスタンス化されていません(この場合はNPE)。

あなたのDAOにはstaticを使用することをお勧めします。 もう1つの解決策はdocumentDao = DAOFactory.getDocumentDAO();@BeforeClassに入れることです。 しかし、他の多くの(より良い)ソリューションを見つけることができます。

+0

ありがとうございます。 Staticと@BeforeClassは両方とも動作します – ulquiorra

関連する問題