モックを利用するサービスクラスのテスト方法

  •  
 
yokoe に投稿

タグ

概要

今回はモックを利用したサービスクラスの単体テストの実装方法についてサンプルと合わせて説明する。

モックを利用するサービスクラスのテスト方法

テスト対象(サービスクラス)を@Injectアノテーションで呼び出す際のcontext.xmlのサンプルはモックを利用せず、DBにアクセスするサービスクラスのテスト方法に記載している。

サービスクラスの単体テストのサンプルを以下に示す。
以下のサンプルはリポジトリをモック化し、テスト対象のメソッドでモック化したメソッドが呼び出されていることとテスト対象の戻り値を検証している。

@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:context.xml")
@Sql("classpath:testCreate.sql")
public class ServiceTest {

    @Inject<!--1-->
    private Service target;

    @Mock<!--2-->
    private Repository mockRepository;

    /**
       * 事前準備
       */
    @Before
    public void setUp() {

    mockRepository = mock(Repository.class);

    }

    @Test
    @Sql("classpath:testInsert.sql")
    public void serviceTest() {
        // 設定
        // 引数:パラメータの設定
        TestDto param = new TestDto();
        param.setId("2");
        param.setName("name");

        when(mockRepository.insert(patam)).thenReturn(1);<!--3-->

        // 試験実行
        List<TestDto> actual = target.service(param);

        // 実行結果検証
        verify(mockRepository).insert(patam);<!--4-->
        assertThat(actual.size()).isEqualTo(2);
        assertThat(actual.get(1).getName()).isisEqualTo("name");<!--5-->

    }

}

1.テスト対象のサービスクラスの呼び出し。
2.テスト対象が依存するリポジトリをモック化。
3.モック化したRepositoryクラスのinsertメソッドの引数がparamの場合の戻り値を"1"に設定。
4.モック化したRepositoryクラスのinsertメソッドの引数にparamが渡されて1回呼び出されたことを検証。
5.テスト対象のメソッド実行時の戻り値の値を検証。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。