当前位置: 首页 > 面试题库 >

@Test之后的回滚事务

黄正浩
2023-03-14
问题内容

首先,我在StackOverflow上发现了很多与此相关的线程,但是它们都没有真正帮助我,所以很抱歉提出可能重复的问题。

我正在使用spring-test运行JUnit测试,我的代码如下所示

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = {})
public class StudentSystemTest {

    @Autowired
    private StudentSystem studentSystem;

    @Before
    public void initTest() {
    // set up the database, create basic structure for testing
    }

    @Test
    public void test1() {
    }    
    ...  
}

我的问题是我希望我的测试不影响其他测试。所以我想为每个测试创建类似回滚的内容。我为此进行了很多搜索,但到目前为止我什么都没找到。我为此使用Hibernate和MySql


问题答案:

只需@Transactional在测试之上添加注释:

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = {"testContext.xml"})
@Transactional
public class StudentSystemTest {

默认情况下,Spring将围绕您的测试方法和@Before/
@After回调启动一个新事务,并在最后回滚。默认情况下它可以工作,在上下文中有一些事务管理器就足够了。

来自:
10.3.5.4事务管理
(粗体):

在TestContext框架中,事务由TransactionalTestExecutionListener进行管理。请注意,即使您未在测试类上显式声明,它TransactionalTestExecutionListener也是
默认配置的@TestExecutionListeners。但是,要启用对事务的支持,必须PlatformTransactionManager在由@ContextConfiguration语义加载的应用程序上下文中提供一个bean
。另外, 您必须@Transactional在类或方法级别为测试声明



 类似资料:
  • 我正在使用spring-test运行JUnit测试,我的代码如下所示 我的问题是我希望我的测试不影响其他测试。所以我想为每个测试创建一些类似回滚的东西。我为此找了很多,但到目前为止一无所获。我使用Hibernate和MySql来实现这个

  • 我创建了一个MySQL数据库,并填充了用于测试的行。我想在这个数据库上进行DAO单元测试。每个都是,因此每次测试后都会进行回滚。不幸的是,它无法工作,因为我的数据库仍在进行更改。 我正在用以下上下文加载Spring配置。xml 这个问题说我 必须在应用程序上下文中提供bean 但即使有了它(在我的上下文中是),什么都没有发生,我的数据库仍然被修改,没有回滚。 这是我的DAO测试课 在我的配置中,或

  • 问题是,即使在为Exception.class声明回滚之后,事务仍然没有回滚。 1.我的数据源

  • 尽管捕获了RuntimeException并声明了noRollbackFor属性,但事务总是回滚。有什么解释吗?? 日志跟踪信息:

  • 问题内容: 我在EJB3无状态会话Bean中使用CMT。另外,我还创建了自己的具有注释“ @ApplicationException(rollback = true)”的异常。 要回滚事务时是否必须使用“ context.setRollbackOnly()”? 我可以通过在bean的public方法内抛出异常来回滚事务吗? 如果是这样(对Q#2的回答是“是”),我是否必须通过在方法中声明异常来将异

  • 情景故事时间: 我“继承”了一个程序,一个用于访问数据库的相当简单的webservice。该程序在某个地方有一个缺陷:它试图更新一个没有更新授权的表。该程序只具有更新数据库队列的权限(Oracle),以保存谁访问了什么信息。这是不受欢迎的行为,现在我纠正了它。注意:这与这个问题本身无关,它只是导致我提出这个问题的原因。 该程序使用Spring+Hibernate来管理和访问数据和事务。 因为程序的