在我的 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 方法之前执行,所以我无法访问@BeforeClass
运行时需要调用的服务。
我尝试使用@PostConstruct
,但是有一个事务可用的问题(我的设置是这样一个 Hibernate 会话仅在事务开始时可用)。奇怪的是,一个会话似乎可用,但从同一会话中获取的两个对象并不相等,这意味着 Hibernate 一级缓存似乎失败了,或者每个操作都发生在单独的会话中。@BeforeTransaction
似乎表现出相同的行为。