【发布时间】:2012-02-09 16:50:47
【问题描述】:
在我的 Spring 应用程序的 JUnit 测试中,我想在 setup 方法中插入大量数据,然后使用它进行测试。但是,@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))
}
}
}
我也尝试过使用@BeforeClass,但这要求方法是静态的,并且在调用任何@Autowired setter 方法之前执行,所以我无法访问我需要在@ 时调用的服务987654326@ 运行。
我尝试使用@PostConstruct,但存在事务可用的问题(我的设置是只有在事务开始时才可以使用 Hibernate 会话)。奇怪的是,一个会话似乎可用,但从同一会话中获取的两个对象不相等,这意味着 Hibernate 一级缓存似乎失败了,或者每个操作都发生在单独的会话中。 @BeforeTransaction 似乎表现出相同的行为。
【问题讨论】:
-
您将
@Rollback注释放在哪里,在类或方法级别? -
@Ralph 我在
setup()方法@Rollback(false)上都试过了,然后在课堂上也试过了,同时还用@Rollback注释了测试方法。 -
您有没有找到实现这一目标的方法?
-
@Arjan:我不这么认为——我换了一个新雇主,所以不必再处理同样的问题了。
标签: spring testing junit junit4 spring-test