Frage

Ich versuche, Integrationstest meine Anwendung mit Frühlings-Testcontext Rahmen. Ich habe dies getan, indem AbstractTransactionalJUnit4SpringContextTests erstreckt, wie üblich. Aber meine Anwendung verfügt über drei verschiedene Datenquellen (mit Namen wie xDataSource, yDataSource, zdataSource), så wenn ich versuche, den Test auszuführen, die autowiring der Datenquelle in AbstractTransactionalJUnit4SpringContextTests wird nicht funktionieren, da es sucht nach einer Datenquelle mit autowire -von-Typ, findet aber drei, so dass er nicht weiß, was man wählen.

Gibt es eine Möglichkeit Frühling Testcontext Framework zu erhalten drei Datenquellen zu benutzen? Wenn ja; wie?

War es hilfreich?

Lösung

OK, ich es herausgefunden. Die Antwort auf diese Frage ist zweifach. Zum einen wird erstreckt AbstractTransactionalJUnit4SpringContextTests nicht funktionieren. Dies ist, weil es eine einzige Datenquelle für die Erstellung der SimpleJdbcTemplate für die Überprüfung Zeug mit einfachen JDBC Abfragen im Test benötigt. Da ich diese Funktion nicht in diesem Test verwende ich extends AbstractTransactionalJUnit4SpringContextTests mit der collowing Konfiguration ersetzen könnte:

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
    DependencyInjectionTestExecutionListener.class,
    DirtiesContextTestExecutionListener.class,
    TransactionalTestExecutionListener.class
})
@Transactional
public class IntegrationTest {
  ...
}

Die Kombination dieser Anmerkungen gibt die gleiche Einstellung wie AbstractTransactionalJUnit4SpringContextTests erstrecken.

Der zweite Teil wurde zu verstehen, da ich drei Datenquellen haben, ich brauche auch alle drei so von der gleichen PlatformTransactionManager referenziert werden. Ich habe Transaktionen verteilt. Das ist unmöglich, mit einem DataSourceTransactionManager, so dass ich ein JtaTransactionManager verwenden musste.

Andere Tipps

Die AbstractTransactionalJUnit4SpringContextTests Klasse wird auf eine einzige Datenquelle autowired nur den Komfort zu ermöglichen, eines injizierten JdbcTemplate Objekt bereitstellt. Sie können die setDataSource(DataSource dataSource) Methode von AbstractTransactionalJUnit4SpringContextTests in Ihrer Testunterklasse außer Kraft setzen und die Datenquelle wie folgt verwenden angeben:

@Resource(name = "dataSource")
public void setDataSource(DataSource dataSource) { 
  this.jdbcTemplate = new JdbcTemplate(dataSource); 
} 

Sie müssen nur den Namen der eine Datenquelle zur Verfügung zu stellen Frühling für die jdbcTemplate Bequemlichkeit Methoden verwenden sollte. Wenn erstreckt AbstractTransactionalJUnit4SpringContextTests bequemer ist als andere Verfahren, die oben erwähnt wurde, dann können Sie es zwingen, zu der Arbeit von nur einem Ihrer Datenquellen auswählen.

fand ich diese Details im Frühjahr Jira Ticket # SPR-4634 .

Sie können als primary="true" in Ihrem xml einer der Datenquellen definieren, und es wird gewählt werden.

Wenn Sie alle threem benötigen, dann können Sie sich nicht auf autowiring - Verwendung ReflectionTestUtils es in Ihren Tests manuell einstellen

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top