Gute Frage. Ironischerweise wurde diese während des Testgesprächs gestern auf der SpringOne Platform angesprochen. Lassen Sie uns sehen, was nötig ist, um eine solche dedizierte Testannotation zu implementieren.
TL;DR
check the code on github
Zunächst einmal müssen Sie die Anmerkung erstellen. Diese Anmerkung verwendet einige Bits aus dem spring-boot-test-autoconfigure
-Modul. Möglicherweise möchten Sie eine In-Memory-Datenbank automatisch konfigurieren (z. B. DataJpaTest
). Sie möchten auch sicherstellen, dass das Caching standardmäßig konfiguriert und deaktiviert ist (falls Sie in Ihrer Spring Boot-Anwendung @EnableCaching
haben). Sie möchten auch, dass alle Ihre Tests standardmäßig @Transactional
sind, also sollten Sie das hinzufügen.
Als nächstes wollen Sie, dass das Schneiden in effektiv schlägt. Alles, was Sie an diesem Punkt brauchen, ist ein DataSource
, eine JdbcTemplate
, Datenbank-Migrationen (flyway/liquibase) und ein Transaktionsmanager @Transactional
zu verarbeiten. Um die anderen Auto-Konfigurationen vermeiden Sie treten sollte folgendes hinzufügen:
@OverrideAutoConfiguration(enabled = false)
Dann möchten Sie ausdrücklich die Auto-Konfigurationen oben ermöglichen. Um dies zu tun, fügen Sie @ImportAutoConfiguration
und fügen Sie den folgenden Inhalt in META-INF/spring.factories
# AutoConfigureDataJpa auto-configuration imports
com.example.test.autoconfigure.jdbc.DataJdbcTest=\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
Der Schlüssel in spring.factories
sollte die FQN Ihrer Anmerkung entsprechen. Wenn Spring Boot @ImportAutoConfiguration
ohne zusätzliche Attribute findet, wird nach einem Schlüssel gesucht, der dem Annotationstyp in spring.factories
entspricht.
Als nächstes möchten Sie zusätzliche Komponenten (Komponentenscan) mit einem Filter hinzufügen können. Um das zu tun, können Sie @TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)
hinzufügen, wobei DataJdbcTypeExcludeFilter
ist ziemlich genau das gleiche wie DataJpaTypeExcludeFilter
(also möchten wir vielleicht eine gemeinsame Klasse dafür extrahieren). automatisch konfiguriert für Sie
@RunWith(SpringRunner.class)
@DataJdbcTest
public class DataJdbcSampleTests {
@Autowired
private JdbcTemplate jdbcTemplate;
...
}
Vielen Dank für die ausgezeichnete Antwort
Sobald Sie das getan haben, müssen Sie nur Ihre Anmerkung und Ihre
JdbcTemplate
ist hinzuzufügen! Außerdem bin ich der Kerl, der die Frage in der Sitzung aufgeworfen hat;) – checkettsDas ist genial! Ich bin froh, dass es hilft. –
Siehe auch [# 6563] (https://github.com/spring-projects/spring-boot/issues/6563) –