LoginSignup
0
0

More than 1 year has passed since last update.

JUnitでテスト用の一時データ(DB)をエクセルで管理する

Last updated at Posted at 2023-02-11

環境設定(ライブラリ準備)

下記の外部ライブラリを追加します

build.gradle
dependencies {

    /* ~~~~~~~~~ */

    testAnnotationProcessor "org.projectlombok:lombok"
    testCompileOnly "org.projectlombok:lombok"
    testImplementation "org.springframework.boot:spring-boot-starter-test"
    testImplementation "org.springframework.boot:spring-boot-starter-data-jdbc"
    testImplementation 'org.junit.jupiter:junit-jupiter:5.9.1'
    testImplementation 'org.dbunit.dbunit:2.7.3'
    testImplementation 'com.github.springtestdbunit:spring-test-dbunit:1.3.0'

    //エクセルからテスト用データを生成するために使用
    testImplementation 'org.apache.poi:poi:4.1.0'
    testImplementation 'org.apache.poi:poi-ooxml:4.1.0'
}

テストパッケージ配下の任意のディレクトリに、DB接続情報の設定クラスを追加します

DatabaseConfig.java
package config;

import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;

import javax.sql.DataSource;

public class DatabaseConfig {

    @Bean
    public DataSource dataSource(){
        return new TransactionAwareDataSourceProxy(
                DataSourceBuilder.create()
                        .username("sa")
                        .password("")
                        .url("jdbc:h2:mem:testdb")
                        .driverClassName("org.h2.Driver")
                        .build()
        );
    }
}

テスト用のデータをエクセルファイルにて準備
今回のテーブル定義は下記の通り

CREATE TABLE TEST_TABLE (
    ID IDENTITY NOT NULL PRIMARY KEY,
    TEXT1 VARCHAR(255) NOT NULL,
    TEXT2 VARCHAR(1) NOT NULL
);

エクセルファイル(テストデータ.xlsx)
image.png

DB検索テスト

@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ExtendWith(SpringExtension.class)
@Transactional
public class DBUnitTest {

    @Autowired
    JdbcTemplate jdbcTemplate;

    /**
     * DB検索テスト
     */
    @Test
    @DatabaseSetup(value = "/testdata/テストデータ.xlsx", type = DatabaseOperation.INSERT)
    void DB検索テスト(){
        List<dept> list = jdbcTemplate.query("SELECT * FROM TEST_TABLE", new BeanPropertyRowMapper<dept>(dept.class));

        assertEquals("3", list.size());
    }

}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0