Java 单元测试比较失败
我对db单元测试有一个问题,它测试数据是否正确持久化。因此,我用我的数据创建了一个示例数据库,并尝试比较设置和预期数据。id生成和其他一切都应该由hibernate管理Java 单元测试比较失败,java,spring,hibernate,dbunit,Java,Spring,Hibernate,Dbunit,我对db单元测试有一个问题,它测试数据是否正确持久化。因此,我用我的数据创建了一个示例数据库,并尝试比较设置和预期数据。id生成和其他一切都应该由hibernate管理 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.c
@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]>
junit.framework.ComparisonFailure:应为行计数(table=user):但为:
不知道我的错在哪里。thx如需任何帮助:)您必须将表名添加到“@ExpectedDatabase” 像这样的
@ExpectedDatabase(value=“dataset.xml”,table=“your_table_name”)但据我所知,
@DatabaseSetup
表示测试前的数据库状态,@ExpectedDatabase
表示测试后的数据库状态。为什么在测试之前数据库中不能有用户。在我持久化另一个(user2)之后,应该有2个,或者我有什么错误吗?您是否已经验证了持久化方法在测试之外有效?如果没有,ComparisonFailure听起来很逻辑……我的@Transactional
DAO方法和dbunit似乎有问题。我添加了TransactionDbUnitTestExecutionListener.class
,但我认为@ExpectedDatabase
是在事务之后调用的。我也有同样的问题,但删除时:junit.framework.ComparisonFailure:row count(table=user)应为:但是是:
我使用了postgres db,我看到行不再存在。。。你成功了吗?几年后。。。有更新吗?谢谢。我从你的评论中得到了帮助!有一种非严格无序模式以避免显式表名: