2014-02-20 189 views
1

我有一個db單元測試的問題,它測試數據是否正確保存。因此,我用我的數據創建了一個樣本數據庫,並試圖比較設置和預期數據。該ID生成和其他一切應該由休眠DBUnit測試比較失敗

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class }) 
@DatabaseTearDown("empty.xml") 
public class UserDaoTests { 

    @Autowired 
    UserAdminDao userDao; 

    @Test 
    @DatabaseSetup("db-setup.xml") 
    @ExpectedDatabase("db-expected.xml") 
    public void testPersistUser(){ 

     User user = new User(); 

     user.setUserId("user2"); 
     user.setName("test2"); 
     user.setEmail("[email protected]"); 
     user.setLocked(false); 
     user.setEnabled(true); 
     user.setVersion(0); 
     user.setPassword("asdfasdf"); 

     userDao.persist(user); 

    } 

} 

進行管理,我的設置是:

<dataset>  
    <user id="1" userId="user1" name="test1" email="[email protected]" locked="0" enabled="1" version="0" password="asdfasdf" /> 

</dataset> 

,並與用戶ID = 2的下面一樣:

<user id="2" userId="user2" name="test2" email="[email protected]" locked="0" enabled="1" version="0" password="asdfasdf" /> 

但我m得到一個比較錯誤:

junit.framework.ComparisonFailure: row count (table=user) expected:<[2]> but was:<[1]> 

不知道我的錯誤在哪裏。 THX對於任何幫助:)

+0

但據我所知它'@ DatabaseSetup'表示測試前的db狀態,'@ ExpectedDatabase'表示測試後的狀態。爲什麼在測試中不能有db中的用戶呢?在我堅持另一個(user2)之後,應該有2個,還是我出錯了? – vicR

+0

您是否已經確認您的堅持方法在您的測試之外工作?如果它不ComparisonFailure聽起來邏輯... –

+0

我的'@ Transactional' DAO方法和dbunit似乎有問題。我添加了'TransactionDbUnitTestExecutionListener.class',但我認爲'@ ExpectedDatabase'在事務之後被調用。 – vicR

回答

1

你得表名稱添加到 「@ExpectedDatabase」 像這樣的東西 @ExpectedDatabase(值= 「dataset.xml」,表= 「your_table_name」)

+0

謝謝。我來自http://stackoverflow.com/questions/33730837/junit-framework-comparisonfailure-table-count-expected-1-but-was-95你的評論幫助我! –