У меня проблема с модульным тестом 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]>
Не знаю, где моя ошибка. ТНХ за любую помощь :)
но, как я понимаю, это '@ DatabaseSetup' означает состояние db перед тестом и' @ ExpectedDatabase' означает после теста. Почему не может быть пользователь в db для теста. После того, как я оставлю еще один (user2), должно быть 2, или я получаю что-то неправильно? – vicR
Вы уже проверили, что ваш метод persist работает вне вашего теста? Если это не соответствует логике ComparisonFailure ... –
Кажется, что существует проблема с методом DAO '@ Transactional' и dbunit. Я добавил 'TransactionDbUnitTestExecutionListener.class', но я думаю, что после транзакции вызывается' @ ExpectedDatabase'. – vicR