Eng*_*_DJ 5 testing junit spring spring-test junit4
在我的Spring应用程序的JUnit测试中,我想在设置方法中插入大量数据,然后使用它进行测试.但是,@Before在每次测试后,无论在方法中执行什么操作,都会回滚,即使我使用注释方法也是如此@Rollback(false)
这是我正在尝试做的简化版本:
public class TestClass
{
@Autowired
MyService service;
@Before
public void setup()
{
if(service.getById(1) == null)
{
Thing thing = new Thing();
thing.setId(1);
service.create(new Thing(1))
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用@BeforeClass,但这要求方法是静态的,并在@Autowired调用任何setter方法之前执行,因此我无法访问@BeforeClass运行时需要调用的服务.
我尝试过使用@PostConstruct,但是有一个事务可用的问题(我的设置是这样的,Hibernate会话只有在事务开始时才可用).奇怪的是,会话似乎可用,但是在同一会话中获得的两个对象不相等,这意味着Hibernate一级缓存似乎失败,或者每个操作都在一个单独的会话中发生.@BeforeTransaction似乎表现出相同的行为.
Spring TransactionalTestExecutionListener负责管理 Junit 测试的事务。它使用两种方法(beforeTestMethod和afterTestMethod)来启动和结束每个 Junit 测试的事务。
至于 @Before 注释,它似乎是这样工作的,它将Test 方法上指定的 @Rollback 属性应用到带有@Before 注释的setUp 方法
我有这个例子来解释这个过程,我有两种测试方法,一种是(回滚假,另一种是回滚真)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes={SpringConfig.class})
@Transactional
public class MyTest
{
@Before
public void setUp()
{
//When executing this method setUp
//The transaction will be rolled back after rollBackTrue Test
//The transaction will not be rolled back after rollBackFalse Test
}
@Test
@Rollback(true)
public void rollBackTrue()
{
Assert.assertTrue(true);
}
@Test
@Rollback(false)
public void rollBackFalse()
{
Assert.assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6711 次 |
| 最近记录: |