Come posso fare le fonti di dati quadro testcontext Primavera uso più?
-
09-10-2019 - |
Domanda
Sto cercando di test di integrazione con la mia applicazione framework Spring TestContext. L'ho fatto estendendo AbstractTransactionalJUnit4SpringContextTests
, come al solito. Tuttavia, la mia domanda ha tre diverse fonti di dati (con nomi come xDataSource, yDataSource, zdataSource), SA quando si tenta di eseguire il test, l'autowiring di origine dati in AbstractTransactionalJUnit4SpringContextTests
non funziona, dal momento che cerca una fonte di dati con autowire -da-tipo, ma trova tre, in modo che non sa quale scegliere.
C'è un modo per ottenere primavera TestContext Framework da utilizzare tre fonti di dati? Se è così; come?
Soluzione
OK, ho capito. La risposta a questa domanda è duplice. In primo luogo, estendendo AbstractTransactionalJUnit4SpringContextTests
non funzionerà. Questo è perché ha bisogno di un'unica fonte di dati per la creazione del SimpleJdbcTemplate
per verificare cose con semplici query JDBC nel test. Dal momento che io non uso questa funzione in questo test, ho potuto sostituirlo extends AbstractTransactionalJUnit4SpringContextTests
con la configurazione collowing:
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class
})
@Transactional
public class IntegrationTest {
...
}
La combinazione di queste annotazioni dà la stessa configurazione come estendentesi AbstractTransactionalJUnit4SpringContextTests
.
La seconda parte è stata la comprensione che da quando ho tre fonti di dati, ho anche bisogno di tutte e tre in modo da fare riferimento con lo stesso PlatformTransactionManager
. Ho distribuito le transazioni. Questo è impossibile con un DataSourceTransactionManager
, così ho dovuto usare un JtaTransactionManager
.
Altri suggerimenti
La classe AbstractTransactionalJUnit4SpringContextTests
è autowired ad un'unica fonte di dati solo per permettere la comodità di fornire un oggetto JdbcTemplate
iniettato. È possibile eseguire l'override del metodo setDataSource(DataSource dataSource)
dal AbstractTransactionalJUnit4SpringContextTests
nella sottoclasse di test e specificare l'origine dati da utilizzare in questo modo:
@Resource(name = "dataSource")
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
Non vi resta che fornire il nome della fonte di un data primavera dovrebbe usare per i metodi jdbcTemplate
convenienza. Se si estende AbstractTransactionalJUnit4SpringContextTests
è più conveniente rispetto ad altri metodi di cui sopra, allora si può costringerlo a lavorare da solo scegliendo una delle fonti di dati.
Ho trovato questi dettagli in primavera biglietto Jira # SPR-4634 .
È possibile definire una delle fonti dati come primary="true"
in xml, e sarà scelto.
Se avete bisogno di tutto threem allora non si può fare affidamento su autowiring - uso ReflectionTestUtils
per impostare manualmente nei test