Hãy xem xét những đặc trưng DBUnit Xuân thử nghiệm (xem https://github.com/springtestdbunit/spring-test-dbunit):Làm thế nào để có DBUnit @DatabaseSetup xảy ra trước khi mùa xuân autowiring?
@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() {
...
}
}
Những gì tôi đã xác minh là, và đã dự kiến, Autowiring sẽ xảy ra trước khi DatabaseSetup. Điều này phải xảy ra vì DBUnit phụ thuộc vào ngữ cảnh ứng dụng để cung cấp nguồn dữ liệu được định cấu hình.
Vấn đề là hạt UnitUnderTest có @PostConstruct nơi nó tải một số dữ liệu từ DB nhưng, do Autowiring xảy ra trước khi thiết lập DBunit, dữ liệu sẽ không có sẵn ở giai đoạn này.
Bất kỳ ý tưởng nào về cách giải quyết vấn đề này một cách rõ ràng?
Cùng vấn đề này ở đây. Bất kỳ giải pháp? – Puce
Nó thực sự không phải là một giải pháp tốt nhưng cho phép tôi di chuyển về phía trước.Tạo một TestClass thừa kế từ đối tượng được autowired và vạch trần một phương pháp để khởi tạo bên ngoài. Sử dụng trong bài kiểm tra @Before. –
Không có giải pháp cho đến nay. Thậm chí không một cách giải quyết tốt. Sẽ tiếp tục tìm kiếm. –