TestNG没有使用Spring Hibernate更新数据库
我正在我的应用程序中使用TestNG,它有GWT、Spring和Hibernate框架。 在我的TestNG类中,我试图创建DaoImpl类对象,该对象用于使用hibernate在数据库中执行添加/更新/删除操作(我在这里使用hibenratetemplate进行事务处理),我的代码在运行应用程序时可以很好地执行添加/更新/删除操作 但当我运行testng类时,我能够获取DaoImpl的bean对象,并能够从数据库中读取数据,但在尝试在数据库中执行更新/删除操作时,成功执行的testng方法不会影响数据库,这意味着数据库中没有任何更改 所以,我想知道是否可以使用TestNG测试更新/删除数据库方法,如果可以,那么该怎么做 下面给出了我的TestNg类代码TestNG没有使用Spring Hibernate更新数据库,hibernate,spring,testng,Hibernate,Spring,Testng,我正在我的应用程序中使用TestNG,它有GWT、Spring和Hibernate框架。 在我的TestNG类中,我试图创建DaoImpl类对象,该对象用于使用hibernate在数据库中执行添加/更新/删除操作(我在这里使用hibenratetemplate进行事务处理),我的代码在运行应用程序时可以很好地执行添加/更新/删除操作 但当我运行testng类时,我能够获取DaoImpl的bean对象,并能够从数据库中读取数据,但在尝试在数据库中执行更新/删除操作时,成功执行的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框架进行测试的正确方法。但是,如果您想测试是否发生了某些数据库操作,则应该刷新()并清除()中间的会话,否则您将遇到错误。