Betrachten Sie die typische DBUnit Frühlings-Test (siehe https://github.com/springtestdbunit/spring-test-dbunit):Wie wird DBUnit @DatabaseSetup vor dem Autowire-Vorgang im Frühjahr ausgeführt?
@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() {
...
}
}
Was ich überprüft haben, ist das, und hat erwartet, autowiring vor DatabaseSetup passieren wird. Dies muss geschehen, weil DBUnit vom Anwendungskontext abhängig ist, um die konfigurierte Datenquelle bereitzustellen.
Das Problem ist, dass die UnitUnderTest-Bean eine @PostConstruct hat, wo es einige Daten aus der DB lädt, aber da die Autowiring vor dem DBunit-Setup passiert, sind die Daten zu diesem Zeitpunkt nicht verfügbar.
Haben Sie Ideen, wie Sie dieses Problem sauber lösen können?
gleiche Problem hier nutzen können. Irgendwelche Lösungen? – Puce
Es ist wirklich keine gute Lösung, aber erlaubt mir, vorwärts zu bewegen.Erstellen Sie eine TestClass, die von dem Objekt, das autowired werden soll, erben und eine Methode für die externe Initialisierung offen legen. Verwenden Sie im @Before-Test. –
Keine Lösung bisher. Nicht einmal eine angemessene Workaround. Wird weiter suchen. –