consideri il tipico DBUnit Primavera di prova (vedi https://github.com/springtestdbunit/spring-test-dbunit):Come fare in modo che DBUnit @DatabaseSetup si verifichi prima dell'autowiring della primavera?
@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() {
...
}
}
Quello che ho verificato è che, e ha previsto, autowiring avverrà prima DatabaseSetup. Ciò deve accadere perché DBUnit dipende dal contesto dell'applicazione per fornire l'origine dati configurata.
Il problema è che il bean UnitUnderTest ha un @PostConstruct in cui carica alcuni dati dal DB ma, poiché l'Autowiring avviene prima dell'impostazione di DBunit, i dati non saranno disponibili in questa fase.
Qualche idea su come risolvere questo problema in modo pulito?
Stesso problema qui. Qualche soluzione? – Puce
Non è davvero una buona soluzione, ma mi ha permesso di andare avanti.Crea un TestClass che eredita dall'oggetto da autowired ed espone un metodo per l'inizializzazione esterna. Utilizzare nel test @Before. –
Nessuna soluzione fino ad ora. Nemmeno una soluzione decente. Continuerà a cercare. –