概要
今回はモックを利用したサービスクラスの単体テストの実装方法についてサンプルと合わせて説明する。
モックを利用するサービスクラスのテスト方法テスト対象(サービスクラス)を@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.テスト対象のメソッド実行時の戻り値の値を検証。
- 閲覧数 1553
コメントを追加