[JAVA] So führen Sie UT mit Excel als Testdaten mit Spring Boot + JUnit5 + DBUnit durch

Einführung

In Anwendungen, die Spring Boot verwenden Beschrieben, wie UT mit JUnit5 + DBUnit implementiert wird.

Da die Projektstruktur auf Spring Initializr basiert, Sie können den Vorgang leicht überprüfen, indem Sie sich auf Folgendes beziehen.

Installation

Ich habe My Batis + Oracle verwendet, um den Vorgang zu überprüfen. Bitte passen Sie die Bibliothek an, die für jede Umgebung verwendet werden soll.

build.gradle


plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'eclipse'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '12'

repositories {
    mavenCentral()
}

dependencies {

    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }

    //Bitte für jede DB einstellen
    runtime files('libs/ojdbc8.jar')

    // Lombok
    compileOnly 'org.projectlombok:lombok'


    // JUnit5
    testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2'
    testImplementation 'org.junit.platform:junit-platform-commons:1.5.2'
    testImplementation 'com.github.springtestdbunit:spring-test-dbunit:1.3.0'

    // DBUnit
    testImplementation 'org.dbunit:dbunit:2.6.0'
}

test {
    useJUnitPlatform()
}

Zu testende Probe

application.yml Da es sich um die Verbindungsinformationen für Oracle handelt, legen Sie diese bitte für jede Datenbank fest. Es gibt auch ein "Schema" im Datenquellenattribut, aber bitte definieren Sie es separat. Bei der Registrierung von Testdaten wird nicht auf die Informationen in datasource.schema verwiesen, und es tritt eine Ausnahme auf.

application.yml


spring:
  datasource:
    url: jdbc:oracle:thin:@localhost:1521/XEPDB1
    username: sample
    password: sample
    driverClassName: oracle.jdbc.OracleDriver
schema: SAMPLE
mybatis: 
  type-aliases-package: com.example.demo.entity
  configuration:
    map-underscore-to-camel-case: true

Probentisch

Für Oracle ... (ry

CREATE TABLE SAMPLE_TABLE 
( SAMPLE_ID NUMBER NOT NULL,
  SAMPLE_NAME VARCHAR2(255 CHAR) NOT NULL, 
  CONSTRAINT "PK_SAMPLE_TABLE" PRIMARY KEY (SAMPLE_ID)
);

Entity

SampleTable.java


@Data
public class SampleTable {

    private long sampleId;

    private String sampleName;
}

Repository ( Mapper )

SampleTableRepository.java


@Mapper
public interface SampleTableRepository {
    @Select("SELECT SAMPLE_ID, SAMPLE_NAME FROM SAMPLE_TABLE WHERE SAMPLE_ID = #{sampleId}")
    SampleTable findOne(long sampleId);
}

Testklasse

DB-Einstellungsklasse zum Testen

DBConfig für die Testausführung. Verwenden Sie diese Konfigurationsklasse, um die Datenquelle und das Schema zu konfigurieren.

DbConfig.java


@Configuration
public class DbConfig {

    @Bean(name = "dbUnitDatabaseConnection")
    public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection(DataSource dataSource, @Value(value = "${schema}") String schema) {
        DatabaseDataSourceConnectionFactoryBean connectionFactory = new DatabaseDataSourceConnectionFactoryBean();
        connectionFactory.setDataSource(dataSource);
        connectionFactory.setSchema(schema);
        return connectionFactory;
    }
}

Loader-Klasse für Excel

XlsDataSetLoader.java


public class XlsDataSetLoader extends AbstractDataSetLoader {

    @Override
    protected IDataSet createDataSet(Resource resource) throws IOException, DataSetException {
        try (InputStream inputStream = resource.getInputStream()) {
            return new XlsDataSet(inputStream);
        }
    }
}

Testklasse

@DbUnitConfiguration: Legen Sie die Datenquelle der obigen "Test DB-Einstellungsklasse" und "Loader-Klasse für Excel" fest. @DatabaseSetup: Legen Sie für jeden Test die in @DbUnitConfiguration festgelegte Datenquelle, Testdaten und Registrierungsmethode fest.

python


@SpringBootTest
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionDbUnitTestExecutionListener.class, DbUnitTestExecutionListener.class })
@DbUnitConfiguration(dataSetLoader = XlsDataSetLoader.class, databaseConnection = { "dbUnitDatabaseConnection" })
public class SampleTableRepositoryTest {

    @Autowired
    SampleTableRepository sampleTableRepository;

    @Test
    @DatabaseSetup(connection = "dbUnitDatabaseConnection", value = "/testdata/findOneTest.xlsx", type = DatabaseOperation.CLEAN_INSERT)
void Daten können normal erfasst werden() {
        SampleTable actual = sampleTableRepository.findOne(3L);
        Assertions.assertEquals("NAME_C", actual.getSampleName(), "SAMPLE_Der Wert von NAME ist wie erwartet");
    }
}

Testdaten

Blattname: Tabellenname

  1. Zeile: Spaltenname Zweite und nachfolgende Zeile: Daten

テストデータ.PNG

abschließend

Wenn der Test mit der obigen Konfiguration ausgeführt wird, werden die Excel-Testdaten in der Datenbank registriert. Die Schwierigkeit ist, dass die Geschwindigkeit langsam ist. (Vielleicht ist die Konfiguration nicht gut In Zukunft werde ich versuchen, die Leistung zu verbessern.

Recommended Posts

So führen Sie UT mit Excel als Testdaten mit Spring Boot + JUnit5 + DBUnit durch
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
So testen Sie den privaten Bereich mit JUnit
[Java] So testen Sie, ob es in JUnit null ist
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So testen Sie Interrupts während Thread.sleep mit JUnit
Verwendung des eingebauten h2db mit Federstiefel
So schreiben Sie einen Komponententest für Spring Boot 2
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Booten nach Umgebung mit Spring Boot of Maven
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Fluss bis zur Ausgabe von Tabellendaten, die mit Spring Boot angezeigt werden sollen
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis
Hinweise zur Verwendung von Spring Data JDBC
[So installieren Sie Spring Data Jpa]
So stellen Sie Spring Boot + PostgreSQL ein
Verwenden Sie DBUnit für den Spring Boot-Test
Verwendung von ModelMapper (Spring Boot)
Testen Sie den Spring Framework Controller mit Junit
Beispielcode zum Testen eines Spring Boot-Controllers mit MockMvc
So wenden Sie Thymeleaf-Änderungen sofort mit #Spring Boot + maven auf den Browser an
So lesen Sie Request Body mit Spring Boot + Spring Security mehrmals
So filtern Sie den JUnit-Test in Gradle
So testen Sie eine private Methode, die ein Array- oder Argument variabler Länge in JUnit verwendet
So löschen Sie Daten mit einem externen Schlüssel
So teilen Sie eine Spring Boot-Nachrichtendatei
Formularklassenvalidierungstest mit Spring Boot
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
Beispiel für Batch-Prozessdaten in der Datenbank mit Apache Camel Spring Boot-Startern
Teil 2 Teil II. So fahren Sie mit den ersten Schritten fort Spring Referenzhandbuch Note Hinweis ①
Bis zur Datenerfassung mit Spring Boot + MyBatis + PostgreSQL
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Einführung in Spring Boot + In-Memory Data Grid
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
So schreiben Sie Testcode mit Basic-Zertifizierung
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Ich wollte Spring Boot in einem Multiprojekt gradle
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Spring Boot - So stellen Sie das Sitzungszeitlimit ein
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
So stellen Sie Spring Boot Dependency Injection (DI) ein
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg
So führen Sie mit RxAndroid einen Komponententest mit JVM an einer Quelle durch
Testen Sie den Inhalt einer Excel-Datei mit JUnit
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
Ich habe versucht, mit Spring Data JPA zu beginnen
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
So testen Sie den Bildschirm zum Hochladen von Dateien mit Spring + Selenium
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Lassen Sie uns herausfinden, wie Sie mit Request Body mit der REST-API von Spring Boot empfangen können
Machen Sie einen Unit-Test mit Junit.