Engineering Note

プログラミングなどの技術的なメモ

Visual Studio Code(VS Code) + Mockitoによるテスト環境の構築

本記事は、Microsoftにより開発されたソースコードエディタである「Visual Studio CodeVS 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の簡単な使い方について学びました。

これからもう少し複雑な方法などについても勉強していきたいと思います。

 

参考書籍

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで