Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元测试比较失败_Java_Spring_Hibernate_Dbunit - Fatal编程技术网

Java 单元测试比较失败

Java 单元测试比较失败,java,spring,hibernate,dbunit,Java,Spring,Hibernate,Dbunit,我对db单元测试有一个问题,它测试数据是否正确持久化。因此,我用我的数据创建了一个示例数据库,并尝试比较设置和预期数据。id生成和其他一切都应该由hibernate管理 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.c

我对db单元测试有一个问题,它测试数据是否正确持久化。因此,我用我的数据创建了一个示例数据库,并尝试比较设置和预期数据。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]>
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,我看到行不再存在。。。你成功了吗?几年后。。。有更新吗?谢谢。我从你的评论中得到了帮助!有一种非严格无序模式以避免显式表名: