JUnitとGradleでのテスト実行 最初に学んだのは、JUnitのテストをGradleでビルド・実行する方法です。GradleはJavaのプロジェクトを管理・自動化するビルドツールで、テストも簡単に実行できます。
例えば、次のコマンドを使うだけでJUnitのテストがすべて実行されます。
./gradlew test
このコマンドを実行すると、src/test/java フォルダにあるJUnitテストクラスが対象になり、テスト結果がコンソールに出力されます。テストに失敗すればエラー内容が表示され、成功すれば「BUILD SUCCESSFUL」と表示されます。
Mockitoによるモックの作成とテスト 次に学んだのは、Mockitoというライブラリを使って「モック」を作る方法です。
モックとは何か モックとは、実際のオブジェクトの代わりに使う、テスト専用の「ニセモノのオブジェクト」です。たとえば、データベースや外部のAPIのように、テスト中に呼び出したくない(重い・不安定・時間がかかる)機能の代わりにモックを使うことで、テストが簡単で確実になります。
Mockitoの基本的な使い方 Mockitoを使えば、数行のコードでモックを作成し、あらかじめ決めた値を返すように設定できます。
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
public class UserServiceTest {
@Test
void testGetUserName() {
UserRepository mockRepo = mock(UserRepository.class);
when(mockRepo.findNameById(1)).thenReturn("Taro");
UserService service = new UserService(mockRepo);
String result = service.getUserName(1);
assertEquals("Taro", result);
}
}
この例では、UserRepository というデータベースに接続するクラスをモックにして、テスト時には実際のデータベースを使わずに処理が行えるようにしています。
モックの振る舞いを検証する さらに、モックが「ちゃんと呼ばれたか」を確認することもできます。
verify(mockRepo).findNameById(1);
この1行で、指定したメソッドが呼び出されたかどうかをチェックできます。
DBUnitを使ったデータベースのテスト 次に学んだのは、DBUnitというライブラリを使って、データベースに対してテストを行う方法です。
DBUnitとは DBUnitは、テスト前にデータベースにテスト用のデータを投入し、テスト後にはデータをクリアすることで、毎回同じ条件で安定したテストを実行できるようにするツールです。
XMLやCSVでデータを用意しておき、Javaコードからそのデータをデータベースに読み込ませて使います。
CRUD操作のテスト たとえば、次のようなコードでXMLファイルからデータを読み込み、テストに使うことができます。
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File("dataset.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
これにより、テスト前にデータベースをある特定の状態にセットできるので、CRUD操作(Create, Read, Update, Delete)の正確性を検証できます。
DBUnitの活用場面 DAOやリポジトリクラスのテストで使える
毎回同じ状態からテストできるため、結果にばらつきが出ない
外部データを使ったブラックボックス的な検証が可能
Spring Bootアプリケーションの単体テスト Spring Bootを使ったアプリケーションでも、単体テストをしっかり書くことができます。
サービスの単体テスト サービスクラスのテストでは、内部のリポジトリをモックにして、処理のロジックだけに焦点を当てます。
@SpringBootTest
class MyServiceTest {
@MockBean
private MyRepository repo;
@Autowired
private MyService service;
@Test
void testGetValue() {
when(repo.findValue()).thenReturn("Hello");
assertEquals("Hello", service.getValue());
}
}
このように、@MockBean でモックを注入し、@Autowired でテスト対象のサービスを取り出してテストを行うことができます。
MockMvcを使ったコントローラーのテスト コントローラー(Web画面やAPIの入り口)のテストには MockMvc を使います。これはブラウザを使わずに、HTTPリクエストを模擬してテストできる便利なツールです。
@WebMvcTest(MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testHello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World"));
}
}
この方法により、Webアプリケーションのコントローラー部分だけをピンポイントでテストすることができます。
RestAssuredによるAPIのテスト 最後に学んだのが、RestAssuredというライブラリを使ったREST APIのテスト方法です。MockMvcよりも実際にサーバーを起動してテストすることが多いため、より本番に近い形でAPIの動作を確認できます。
基本的な書き方
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
@Test
void apiTest() {
given()
.port(8080)
.when()
.get("/api/hello")
.then()
.statusCode(200)
.body(equalTo("Hello"));
}
まとめ 今日の学びは、Javaのテスト技術を大きく広げるものでした。以下のような知識が身につきました。
JUnitとGradleによるテストの基本
Mockitoによるモックの作り方と活用方法
DBUnitによるデータベースの状態管理とテスト
Spring Bootアプリのサービスやコントローラーの単体テスト
RestAssuredを使った実践的なAPIテスト
どれも最初は難しそうに見えましたが、実際に使ってみると「テストがあると安心して開発できる」という実感が湧いてきました。今後も、各ツールをさらに深く理解しながら、自分の携わるプロジェクトでも使いこなしていきたいと思います。
- 閲覧数 11
コメントを追加