Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Spring 在单元测试期间提交/刷新事务?_Spring_Unit Testing_Transactions_Junit4 - Fatal编程技术网

Spring 在单元测试期间提交/刷新事务?

Spring 在单元测试期间提交/刷新事务?,spring,unit-testing,transactions,junit4,Spring,Unit Testing,Transactions,Junit4,我正在使用Spring和JUnit为我的DAO编写一些集成测试。我在测试方法开始时设置了测试数据,然后在相同的测试方法中测试我的DAO方法。问题是,如果我不刷新/提交事务,EntityManager将返回我在数据设置中刚刚创建的实体的同一个实例,这使得我的测试毫无用处,因为它们总是会通过 例如 一种方法是在我的DAO中公开commit()和/或flush()方法。但我宁愿不这样做,因为在生产代码中,这几乎不需要发生(让EntityManager做它自己的事情)。有没有办法通过注解或Spring配

我正在使用Spring和JUnit为我的DAO编写一些集成测试。我在测试方法开始时设置了测试数据,然后在相同的测试方法中测试我的DAO方法。问题是,如果我不刷新/提交事务,EntityManager将返回我在数据设置中刚刚创建的实体的同一个实例,这使得我的测试毫无用处,因为它们总是会通过

例如


一种方法是在我的DAO中公开commit()和/或flush()方法。但我宁愿不这样做,因为在生产代码中,这几乎不需要发生(让EntityManager做它自己的事情)。有没有办法通过注解或Spring配置来配置它?我将Spring、JPA2与Hibernate一起使用。

您可以在@Transactional上设置defaultRollback属性来重置测试之间的内容。这听起来不像你想要的,只是先把它扔出去


在测试中,实体管理器的行为正常。您希望为测试注入不同的行为,以“断开”安装程序与测试其余部分的连接。我在一些测试中做的一件事是直接从测试调用实体管理器上的flush。我只需要做几次,但在那些情况下它是有价值的。我在测试中(不是DAO)这样做是为了不在DAO上提供我不想让人们调用的方法。

当然,谢谢你提醒我。我太习惯通过DAO使用实体管理器了,以至于我忘了我可以直接将它连接到测试中调用它。:)
@Test   
@Transactional()
public void loadTreeBasicCase() {
    // creates and saved node to DB
    Node n = createNode();

    // test DAO
    Node result = dao.lookup(n.getId());

    // verify
    assertThat(n, equalTo(result));
}