2014-02-20 3 views
1

У меня проблема с модульным тестом db, который проверяет правильность данных. Поэтому я создал образец db с моими данными и попытался сравнить настройки и ожидаемые данные. Поколение идентификатора и все остальное должно управляться спячкамиОшибка сравнения тестов 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> 

и то же самое с идентификатором пользователя = 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]> 

Не знаю, где моя ошибка. ТНХ за любую помощь :)

+0

но, как я понимаю, это '@ DatabaseSetup' означает состояние db перед тестом и' @ ExpectedDatabase' означает после теста. Почему не может быть пользователь в db для теста. После того, как я оставлю еще один (user2), должно быть 2, или я получаю что-то неправильно? – vicR

+0

Вы уже проверили, что ваш метод persist работает вне вашего теста? Если это не соответствует логике ComparisonFailure ... –

+0

Кажется, что существует проблема с методом DAO '@ Transactional' и 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 Ваш комментарий помог мне! –

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