質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

525閲覧

SpringBootのアプリケーションでDBUnitを使ってテスト実行したが、エラーが出る

developer1223

総合スコア6

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/10/18 07:40

編集2022/10/20 00:22

前提

SpringBootで従業員管理システムを開発しています。
ホーム画面の処理をDBUnitでテストしようとしたところ、NullPointerExceptionが返されます。
ホーム画面では従業員が全件表示されるようにデータベースから取得し表示しています。

ローカル環境ではMySQLを使用していますが、単体テスト用にH2データベースを使っております。

実現したいこと

  • select文でデータ1件を取得しListに格納、List.sizeで1件であればテスト成功にしたい

発生している問題・エラーメッセージ

java.lang.NullPointerException at com.example.demo.HomeControllerTest.全件表示のテスト(HomeControllerTest.java:79)

該当のソースコード

Java

1package com.example.demo; 2 3import static org.junit.jupiter.api.Assertions.*; 4 5import java.io.File; 6import java.nio.charset.StandardCharsets; 7import java.util.List; 8import java.util.Map; 9 10import javax.transaction.Transactional; 11 12import org.dbunit.IDatabaseTester; 13import org.dbunit.JdbcDatabaseTester; 14import org.dbunit.dataset.IDataSet; 15import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; 16import org.dbunit.operation.DatabaseOperation; 17import org.h2.tools.RunScript; 18import org.junit.jupiter.api.BeforeAll; 19import org.junit.jupiter.api.Test; 20import org.springframework.beans.factory.annotation.Autowired; 21import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; 22import org.springframework.jdbc.core.JdbcTemplate; 23import org.springframework.test.context.TestExecutionListeners; 24import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; 25 26import com.github.springtestdbunit.TransactionDbUnitTestExecutionListener; 27import com.github.springtestdbunit.annotation.DatabaseSetup; 28 29@AutoConfigureMockMvc 30@TestExecutionListeners({ 31 DependencyInjectionTestExecutionListener.class, // このテストクラスでDIを使えるように指定 32 TransactionDbUnitTestExecutionListener.class // @DatabaseSetupや@ExpectedDatabaseなどを使えるように指定 33}) 34@Transactional 35public class HomeControllerTest { 36 private static final String JDBC_DRIVER = org.h2.Driver.class.getName(); 37 private static final String JDBC_URL = "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1"; 38 private static final String USER = "sa"; 39 private static final String PASSWORD = ""; 40 41 @Autowired 42 private JdbcTemplate jdbcTemplate; 43 44 @BeforeAll 45 public static void createSchema() throws Exception { 46 RunScript.execute(JDBC_URL, USER, PASSWORD, "src/test/resources/schema.sql", StandardCharsets.UTF_8, false); 47 } 48 49 private IDataSet readDataSet(String dataPath) throws Exception { 50 // for XML 51 return new FlatXmlDataSetBuilder().build(new File(dataPath)); 52 } 53 54 private void cleanlyInsert(IDataSet dataSet) throws Exception { 55 IDatabaseTester databaseTester = new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD); 56 databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT); 57 databaseTester.setDataSet(dataSet); 58 databaseTester.onSetup(); 59 } 60 61 @Test 62 void 全件表示のテスト() throws Exception { 63 // Arrange 64 IDataSet dataSet = readDataSet("src/test/resources/testdata/init-data/initData.xml"); 65 cleanlyInsert(dataSet); 66 67 String sql = "select * from m_employee"; 68 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); 69 70 assertEquals(1, list.size()); 71 } 72}

schema.sql

1create table IF NOT EXISTS m_employee 2( 3 id int auto_increment, 4 name varchar(50) not null, 5 name_kana varchar(50) not null, 6 status varchar(50) not null, 7 telephone_number varchar(50), 8 mail_address varchar(50), 9 entering_date date not null, 10 primary key (id) 11);

initData.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<dataset> 3 <m_employee 4 id="1" 5 name="サンプル 一郎" 6 name_kana="サンプル イチロウ" 7 status="在職" 8 telephone_number="090-0000-0001" 9 mail_address="sample01@example.com" 10 entering_date="2022-04-01" 11 /> 12</dataset>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問