2016-03-21 44 views
0

我有2個表格,但是這篇文章中的代碼導致異常。DbUnit中錯誤的表計數+ springtestdbunit

我做錯了什麼?

這是怎麼解決的?

失敗文本

junit.framework.ComparisonFailure: table count 
Expected :5 
Actual :2 

出海依賴

<dependency> 
    <groupId>com.github.springtestdbunit</groupId> 
    <artifactId>spring-test-dbunit</artifactId> 
    <version>1.2.1</version> 
</dependency> 

數據集

<?xml version='1.0' encoding='UTF-8'?> 
<dataset> 
<table name="CATEGORY"> 
    <column>CATEGORY_ID</column> 
    <row> 
     <value>1</value> 
    </row> 
    <row> 
     <value>2</value> 
    </row> 
</table> 
<table name="CATEGORY_RELATIONS"> 
    <column>CATEGORY_RELATIONS_PARENT_ID</column> 
    <column>CATEGORY_RELATIONS_CATEGORY_ID</column> 
    <column>ID</column> 
    <row> 
     <value>1</value> 
     <value>2</value> 
     <null/> 
    </row> 
</table> 
</dataset> 

帖子消息(信息,由人要求加)

測試

@Test 
@DatabaseSetup("classpath:data-sets/empty.xml")  
@ExpectedDatabase("classpath:data-sets/categories/save.xml") 
public void save() throws Exception { 
    testTarget.save(parentCategory); 
    testTarget.save(childCategory); 
} 

empty.xml

<dataset> 
    <CATEGORY/> 
    <CATEGORY_RELATIONS/> 
</dataset> 

否表計數器

@ActiveProfiles("test") @RunWith(SpringJUnit4ClassRunner.class)  
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, 
    DirtiesContextTestExecutionListener.class, 
    TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class, 
    HSqlTestExecutionListener.class}) 
@ContextConfiguration({"classpath:contexts/bean-locations.xml"}) 
public class SpringHsqlTest {//... 

回答

1

數據集XML清楚地顯示了被創建兩個表,想必在一個單獨的單元測試數據庫。

您的測試代碼似乎期待2個表,但似乎存在5個 - 讓我們看看我們是否可以證實這一點。

我認爲test()測試方法中的testTarget對象是某種類型的Spring存儲庫。所以,你應該能夠下列添加到資料庫:

@Query(value = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='TABLE' ", nativeQuery = true) List<String> tableNames();

然後在測試的save()方法:

for (String table : testTarget.tableNames()) { System.out.println(table); }

這一點應引起表的列表測試方法可以在控制檯上打印。

+0

其他測試進展順利,但是與這樣的XML結構: 「 」。我只有一個數據庫。 – ArthurDn

+0

好的,你可以發佈失敗的測試用例的代碼嗎?假設你有一些代碼來計算表的數量,並且你將一個預期的數字(這看起來是基於輸出的5)和實際的數字(它似乎是基於輸出的2)傳遞給一個斷言? –

+0

'@Test @DatabaseSetup(「classpath:data-sets/empty.xml」) @ExpectedDatabase(「classpath:data-sets/categories/save.xml」) public void save()throws Exception { testTarget。保存(parentCategory); testTarget.save(childCategory); }' – ArthurDn