我正在进行一些集成测试,在集成测试之前将数据加载到远程测试数据库中 . 但是,这是一个很多数据,所以我宁愿在我的所有集成测试之前只做一次 .
我已经使用@ BeforeClass / @ AfterClass使用@RunWith(Suite.class)和JUnitCore.runClasses()来运行我的所有测试类作为套件 . 但是,我仍然坚持如何让Spring自动装配设置和拆卸所需的资源 . 例:
public class AbstractTest {
@Autowired
private SessionFactory sf;
@BeforeClass
public static void setup() {
sf.getCurrentSession().createQuery("make tables");
}
}
但是sf总是为null,因为@BeforeClass需要从静态上下文运行 . 我也试过使用@ClassRule,如下所示:How to share JUnit BeforeClass logic among multiple test classes但没有变化;
如何获得一套测试类的@ BeforeClass / @ AfterClass功能,并在@ BeforeClass / @ AfterClass方法中获得Autowired资源?让它与@Parameterized一起运行会更好 .
1 回答
SpringJUnit4ClassRunner在自动装配之前调用BeforeClass . 在调用BeforeClass方法之后注入一个上下文,但是还没有注入 .
您可以尝试这个(而不是@BeforeClass使用来自InitializingBean的afterPropertiesSet - 它执行BeforeClass调用但在执行所有测试统计之前)
要么
无论如何,它都是一些解决方法,因为测试类的BeforeClass在spring上下文之前被细分 .
变式2,更新