本記事は、Microsoftにより開発されたソースコードエディタである「Visual Studio Code(VS Code)」を用いて、モックフレームであるMockitoを試してみました。
事前準備
コマンドパレットから「Maven: Create Maven Project」を選択し、「spring-boot-blank-archetype」を選択してプロジェクトを作成します。
今回のお試し用に作成したコードは以下のようなものです。
- SendDataクラス:何かのデータ送信を実行し、その結果(ステータス)を返す
- SendDataServiceクラス:SendDataクラスを実行し、そのステータスを元に「"SUCCESS"、"FAIL"、"UNKNOWN"」を文字列を返す
// SendData.java public class SendData { public int send() { int status = new Random().nextInt(3); return status; } }
// SendDataService.java public class SendDataService { @Autowired private SendData sendData; public String execute() { int status = sendData.send(); switch(status) { case(0): return "SUCCESS"; case(1): return "FAIL"; default: return "UNKNOWN"; } } }
テストコードの作成
以下が作成したテストコードとなります。
// SendDataServiceTest.java public class SendDataServiceTest { @InjectMocks private SendDataService service = new SendDataService(); @Mock private SendData sendData; @Before public void setup() { MockitoAnnotations.initMocks(this); } @After public void tearDown() throws Exception { } @Test public void executeTest() { Mockito.when(sendData.send()).thenReturn(0); // // 実行 String result = service.execute(); MatcherAssert.assertThat(result, CoreMatchers.is("SUCCESS")); } }
@InjectMocksの箇所でテスト対象のクラスを注入します。
今回はSendDataServiceクラスがテスト対象クラスとなります。
@Mockでモック化するオブジェクトを定義します。
今回はSendDataServiceクラス内のSendDataクラスのオブジェクトをモック化します。
@Beforeでテスト実行時の初期化処理を定義し、@Afterでテスト終了後の処理を定義します。
@Testでテストコードを実装しています。
Mockito.when(...).thenReturn(...)
で特定の処理(メソッド)が実行された時の返り値の動作を定義します。
今回はSendDataクラスのsend()メソッドが実行されたら0を返すという処理を定義しています。
最後に実行をし、その結果が"SUCCESS"であることを確認します。
まとめ
今回はモックフレームワークのMockitoの簡単な使い方について学びました。
これからもう少し複雑な方法などについても勉強していきたいと思います。