【发布时间】:2013-11-26 04:03:16
【问题描述】:
考虑典型的 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 设置之前,因此在此阶段数据将不可用。
关于如何以干净的方式解决此问题的任何想法?
【问题讨论】:
-
这里有同样的问题。有什么解决办法吗?
-
这确实不是一个好的解决方案,但让我继续前进。创建一个继承自要自动装配的对象的 TestClass 并公开一个用于外部初始化的方法。在@Before 测试中使用。
-
目前没有解决方案。甚至不是一个体面的解决方法。将继续搜索。
标签: spring dbunit spring-test spring-test-dbunit