LoginSignup
0
0

JUnitまとめ

Posted at

JUnitとは

Javaの単体テスト用フレームワーク。単体テストを効率よく実施するためのもの。

メリット

  • テスト実行を自動化できる
  • テストコードを仕様・ソースの理解に利用できる
  • 問題を早期発見できる。
    etc..

デメリット

  • 関連ツールやライブラリの知識が必要
  • テストコードの実装に時間がかかる
  • Junitの仕組みでは、向いていないテストがある
    etc..

springでのtest

src/test/java~に作成したテストクラスを格納する。

  • テスト対象クラスの同一パッケージ配下にテストクラスを作成
  • デフォルトではSpringBootApplicationクラスに対応するテストクラスが
  • テストクラスの命名は、「テスト対象クラス名 + Test」となる。

spring-boot-starter-test

spring-boot-starter-testを追加する事で使用できるライブラリ(代表的なもの)

  • JUnit5

以下モジュールで構成される単体テストフレームワーク。

・Junit Platform:テストフレームワークを起動するための基盤

・Junit Jupiter:Junit5のことを指し、TestEngineを提供

  • Spring Test & Spring Boot Test

Spring Bootベースアプリケーションのテストを実行するために必要なライブラリ群

MockMVCという、Tomcatを起動させない状態でも、Springの動作を再現することができるフレームワークを持つ

  • AssertJ

Junitで値を検証するときに使用するライブラリ。

書き方

@SpringBootTestを利用することで、SpringBootアプリケーションの検証を行うことができる。

JUnit5の書き方に従い、AssertJを利用した値の検証を記述することができる。

@SpringBootTest
class SpringitemApplicationTests {

	@Autowired
	private ItemController itemController;
	
	// アプリケーションがSpringコンテキストを正常にロードできたかどうかを検証する。
	@Test
	void contextLoads() {
		//AssrtJを利用した検証を実装する
		//assertThatの引数に検証の値を入れる
		//続けてメソッドにて期待値を指定。この場合はNullでないこと
		
		//itemControllerが@Autowiredによって、自動でインスタンス化されてNullでないことを確認する。
		assertThat(itemController).isNotNull();
	}

テストクラスにてSpring Bootの機能が利用できるようになる。

コンソール上、SpringBootが起動しているように見えるが、Tomcatサーバは起動していない。

Junitがテストケース(テスト項目表の1テストケースに対応するイメージ)として管理する。

AssertJの機能を用いて値を検証する。asserThat(テスト項目).メソッド(期待値)という形式で、テスト項目がNULLでないことを確認する。

期待値と異なっていた場合は、単体テストNGとしてJunitが管理する。

MockMVCを用いたテストケースの書き方

MockMVCを使用すると、アプリケーションサーバが起動していない状態においても、Springアプリケーションの動作を再現させることができる。

Controllerのテストを行う際に利用。

@SpringBootTest
@AutoConfigureMockMvc
class ItemControllerTest {
	
	@Autowired
	private MockMvc mvc;

	
	//検索結果が想定通りであるかを確認するテスト
	@Test
	void testGetItem() throws Exception{
		int itemId = 1;
		String responseJsonString =mvc.perform(get("/items/{itemId}",itemId)
				.contentType(MediaType.APPLICATION_JSON)
				.accept(MediaType.APPLICATION_JSON_UTF8_VALUE) //非推奨であるが現時点では入れる必要がある。
				.characterEncoding("UTF-8"))
				.andExpect(status().isOk()) //ステータスコードチェック
				.andReturn().getResponse().getContentAsString();
		// 取得したJsonオブジェクトをJavaオブジェクトにマッピング
		ObjectMapper objectMapper =  new ObjectMapper();
		Item responseItem = objectMapper.readValue(responseJsonString, Item.class);
		
		//各値を比較する
		assertThat(responseItem.getItemId()).isEqualTo(1L);
		assertThat(responseItem.getItemName()).isEqualTo("ネックレス");
		assertThat(responseItem.getItemCategory()).isEqualTo("ジュエリ");
	}

}
  • @AutoConfigureMockMvc
    @AutoConfigureMockMvcアノテーションを付加すると、MockMVCが自動構成され、@Autowiredアノテーションで利用することができるようになる。

  • MockMvc.performメソッドを利用して、HTTP GET等のAPI呼び出しを再現し、動作を検証する事ができる。

参考ハンズオン

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