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.
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()
}
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
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);
}
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;
}
}
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);
}
}
}
@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");
}
}
Blattname: Tabellenname
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