首先,我在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
8条答案
按热度按时间xmd2e60i1#
只需在测试的顶部添加
@Transactional
注解:字符串
默认情况下,Spring将围绕测试方法和
@Before
/@After
回调启动一个新事务,并在最后回滚。它默认工作,在上下文中有一些事务管理器就足够了。来自:*10.3.5.4事务管理 *(粗体):
在TestContext框架中,事务由TransactionalTestExecutionListener管理。请注意,
TransactionalTestExecutionListener
是默认配置的,即使您没有在测试类上显式声明@TestExecutionListeners
。但是,要启用对事务的支持,必须在由@ContextConfiguration
语义加载的应用程序上下文中提供PlatformTransactionManager
bean。此外,您必须在测试的类或方法级别声明@Transactional
。cigdeys32#
这种编辑并没有使帖子更容易阅读,更容易找到,更准确或更容易访问。更改要么是完全多余的,要么会严重损害可读性。
集成测试文档相关部分的正确永久链接。
要启用对事务的支持,必须在通过
@ContextConfiguration
语义加载的ApplicationContext
中配置PlatformTransactionManager
bean。字符串
此外,您必须在测试的类或方法级别声明Spring的
@Transactional
注解。型
使用
@Transactional
注解测试方法会导致测试在事务中运行,默认情况下,该事务将在测试完成后自动回滚。如果一个测试类用@Transactional
注解,那么这个类层次结构中的每个测试方法都将在一个事务中运行。83qze16e3#
提到添加
@Transactional
的答案是正确的,但为了简单起见,您可以只使用测试类extends AbstractTransactionalJUnit4SpringContextTests
。3zwjbxry4#
我知道,我太晚了,不能给出答案,但希望它能帮助到别人。另外,我刚刚解决了我的测试问题。这是我在测试中得到的:
我的测试班
字符串
上下文XML
型
我仍然有问题,数据库没有被自动清理。
当我将以下属性添加到BasicDataSource时,问题得到解决
型
希望对你有帮助。
epfja78i5#
除了在
@Test
方法上添加@Transactional
外,还需要添加@Rollback(false)
ffx8fchx6#
您需要使用Spring上下文和事务管理器运行测试,例如,
字符串
有关更多详细信息,请参见Spring参考的第
3.5.8. Transaction Management
章。aiqt4smr7#
正如上面最受欢迎的答案所回答的那样,基本上你只需要做下面的两件事就可以在测试用例中回滚事务:
如果它仍然不起作用,请仔细检查您的系统是否使用多个数据源,如果是这样,您还需要根据SQL将连接到哪个数据库来指定事务的预期数据源。
代码示例:
字符串
djmepvbi8#
您可以禁用回滚:
字符串
示例如下:
型