Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
TestNG没有使用Spring Hibernate更新数据库_Hibernate_Spring_Testng - Fatal编程技术网

TestNG没有使用Spring Hibernate更新数据库

TestNG没有使用Spring Hibernate更新数据库,hibernate,spring,testng,Hibernate,Spring,Testng,我正在我的应用程序中使用TestNG,它有GWT、Spring和Hibernate框架。 在我的TestNG类中,我试图创建DaoImpl类对象,该对象用于使用hibernate在数据库中执行添加/更新/删除操作(我在这里使用hibenratetemplate进行事务处理),我的代码在运行应用程序时可以很好地执行添加/更新/删除操作 但当我运行testng类时,我能够获取DaoImpl的bean对象,并能够从数据库中读取数据,但在尝试在数据库中执行更新/删除操作时,成功执行的testng方法不会

我正在我的应用程序中使用TestNG,它有GWT、Spring和Hibernate框架。 在我的TestNG类中,我试图创建DaoImpl类对象,该对象用于使用hibernate在数据库中执行添加/更新/删除操作(我在这里使用hibenratetemplate进行事务处理),我的代码在运行应用程序时可以很好地执行添加/更新/删除操作

但当我运行testng类时,我能够获取DaoImpl的bean对象,并能够从数据库中读取数据,但在尝试在数据库中执行更新/删除操作时,成功执行的testng方法不会影响数据库,这意味着数据库中没有任何更改

所以,我想知道是否可以使用TestNG测试更新/删除数据库方法,如果可以,那么该怎么做

下面给出了我的TestNg类代码

Public class RoleMgmtDAOImplTest extends AbstractTransactionalTestNGSpringContextTests {
RoleMgmtDAOImpl roleMgmtDAOImpl;
     @BeforeClass
        public void setup() {
          Assert.assertNotNull(applicationContext);
          roleMgmtDAOImpl=(RoleMgmtDAOImpl) applicationContext.getBean("roleDAO");
          Assert.assertNotNull(roleMgmtDAOImpl);
     }
}

我认为您需要正确设置交易,请查看以下链接:

因此,您的类可能需要以下注释:

@ContextConfiguration(…)//上下文应包括事务管理器
@TransactionConfiguration(…)//非默认情况下事务管理器的名称
@交易的

默认情况下,我相信将为每个测试创建一个事务,并在每个测试结束时回滚(因此,在测试运行后,您不会看到对db的任何更改)

通常,您不希望测试数据持久化。如果这样做,您可以在类级别更改@TransactionConfiguration注释内的默认回滚行为,或者在测试级别更改@rollback注释内的默认回滚行为,请参阅:


就测试更新/删除而言,我不建议您更改默认回滚行为。相反,您可以在更新后找到对象(在同一测试中,因此在事务中),并断言您的更改。

正如Corin所建议的,关键是@Rollback注释。如果不使用,数据库更改不会真正执行到数据库中

这是使用Spring框架进行测试的正确方法。但是,如果您想测试是否发生了某些数据库操作,则应该刷新()并清除()中间的会话,否则您将遇到错误。