【发布时间】:2014-02-20 13:33:19
【问题描述】:
我的数据库单元测试有问题,它测试数据是否正确保存。因此,我用我的数据创建了一个示例数据库,并尝试比较设置和预期数据。 id 生成和其他一切都应该由 hibernate 管理
@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("user2@email.com");
user.setLocked(false);
user.setEnabled(true);
user.setVersion(0);
user.setPassword("asdfasdf");
userDao.persist(user);
}
}
我的设置是:
<dataset>
<user id="1" userId="user1" name="test1" email="user1@email.com" locked="0" enabled="1" version="0" password="asdfasdf" />
</dataset>
和下面的用户 id=2 相同:
<user id="2" userId="user2" name="test2" email="user2@email.com" locked="0" enabled="1" version="0" password="asdfasdf" />
但我得到一个比较错误:
junit.framework.ComparisonFailure: row count (table=user) expected:<[2]> but was:<[1]>
不知道我的错误在哪里。感谢您的帮助:)
【问题讨论】:
-
但据我了解,
@DatabaseSetup表示测试前的数据库状态,@ExpectedDatabase表示测试后的状态。为什么测试前数据库中不能有用户。在我坚持另一个(user2)之后应该有2个,或者我有什么问题吗? -
您是否已经验证您的 persist 方法在您的测试之外有效?如果不是,ComparisonFailure 听起来很合乎逻辑……
-
我的
@TransactionalDAO 方法和dbunit 似乎有问题。我添加了TransactionDbUnitTestExecutionListener.class,但我认为@ExpectedDatabase是在事务之后调用的。 -
我遇到了同样的问题,但是删除:
junit.framework.ComparisonFailure: row count (table=user) expected:<[4]> but was:<[5]>我使用了一个 postgres 数据库,我看到该行不再存在...你让它工作了吗? -
几年后...有什么更新吗?
标签: java spring hibernate dbunit