2016-03-21 21 views
0

2 tablom var ancak bu gönderi yönergesi istisnasından kod.DbUnit + springtestdbunit öğesinde yanlış tablo sayısı

Neyi yanlış yapıyorum?

Bunu nasıl düzeltirim?

Başarısız metin

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

Pom bağımlılıkları

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

Veri kümesi

<?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> 

POST GÜNCELLEME (katma insanlar tarafından talep edilen bilgiler,)

Testi

@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> 

yok masa sayaçları

@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 {//... 

cevap

1

veri kümesi XML açıkça muhtemelen ayrı birim test veritabanında, iki tablo oluşturuluyor gösterir.

Test kodunuz 2 tablo bekliyor gibi görünüyor, ancak 5 tane var gibi görünüyor - bunu teyit edip edemeyeceğimizi görelim.

TestTarget nesnesini kaydetme() test yönteminizde bir çeşit yay deposu olduğunu kabul ediyorum. testte kaydetmek() yönteminde sonra

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

: Yani o depoya aşağıdakileri ekleyin gerekir

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

bu tabloların listesini neden olmalıdır Test yönteminin konsolda basılmasına erişimi vardır.

+0

Diğer testler, ancak bu tür xml yapısı ile iyi gidiyor: " ". Tek bir veritabanım var. – ArthurDn

+0

Tamam, başarısız olan test kutusunun kodunu gönderir misiniz? Muhtemelen tabloların sayısını sayan bir kodunuz var ve beklenen sayıyı (çıkışa dayalı 5 gibi görünüyor) ve gerçek sayıyı (çıktıya göre 2 gibi görünüyor) bir iddiana iletiyorsunuz ? –

+0

'@Test @DatabaseSetup ("sınıf yolu: data-setleri/empty.xml") @ExpectedDatabase ("sınıf yolu: data-setleri/kategoriler/save.xml") tasarruf public void() İstisna { testTarget atar. (ParentCategory) kaydetmek; testTarget.save (childCategory); } ' – ArthurDn

İlgili konular