考虑典型的 DBUnit Spring 测试(参见https://github.com/springtestdbunit/spring-test-dbunit):
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/META-INF/spring/applicationContext-database.xml",
"classpath:spring-*.xml"
})
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class })
@DatabaseSetup("/dbunit/data.xml")
public class UnitTest {
@Autowired
private UnitUnderTest uut;
@Test
public void shouldInitDB() {
...
}
}
我已经验证的是,并且已经预料到,自动装配将在 DatabaseSetup 之前发生。这必须发生,因为 DBUnit 依赖于应用程序上下文来提供配置的数据源。
问题是 UnitUnderTest bean 有一个 @PostConstruct ,它在其中从 DB 加载一些数据,但是由于自动装配发生在 DBunit 设置之前,因此在此阶段数据将不可用。
关于如何以干净的方式解决此问题的任何想法?