0
1

【jUnit】Mockってなに?

Posted at

はじめに

今回はjUnitで使用するMockについて、理解を深めていければと思いMockってなに?や使うとどんなメリットがあるの?などを深ぼっていければ思います!
間違い等ございましたらご指摘いただけますと幸いです。

Mock(モック)とは

モックは、ソフトウェアテストのために実際のオブジェクトの代わりに使用されるダミーオブジェクトです。
つまり、偽物のオブジェクト(Mock)を使用して、テストをする際に本物のオブジェクトに頼らずにテストができます。

Mockitoとは

JavaでMockオブジェクトを作成し、管理するためのフレームワーク(ライブラリ)です。
Mockitoのおかげで、Mockオブジェクトを簡単に作成し使用することができます。

Mockを使用するケース

1.Serviceクラス

コード例
@SpringBootTest
public class UserServiceTest {

    @InjectMocks
    private UserService service;

    @Mock
    private UserRepository repository;

    @Test
    void testDeleteById() {
        Integer id = 1;
        doNothing().when(repository).deleteById(id);

        service.deleteById(id);

        verify(repository, times(1)).deleteById(id);
    }
    
}

@InjectMockは、Mockと同様Mockitoフレームワークで使われるアノテーションですが、用途と役割が異なります。テスト対象のクラスのインスタンスを作成し、そのクラスの依存関係を自動的にモックオブジェクトに注入するために使用されます。

2.Controllerクラス

コード例
@SpringBootTest
public class UserControllerTest {

    @InjectMocks
    private UserController controller; 

    @Mock
    private UserService service;  

    @Test
    void testDeleteUser() {
        Integer id = 1;
        doNothing().when(service).deleteById(id);  

        controller.deleteUser(id); 

        verify(service).deleteById(id);  
    }
}

(3.Repositoryクラス】

リポジトリクラスのテストでは、モックを使用することは比較的少ないです。

Mockを使用するメリット

・簡単にテストできる
モックを使うことで、テスト対象のコードが他のシステムやサービスに依存せずにテストできます。
例えば、データベースが設定されていなくても、モックを使うことで、データベースがあるかのように振る舞うことができます。これにより、テストを早く始めることができ、他のシステムの準備が整っていなくてもテストを進めることができます。

・スピードが速い
モックは実際のシステムを使わずに振る舞いを模擬するため、テストが非常に速く実行できます。

・安定したテスト
モックを使うと、テスト対象のコードが実際の外部システム(例えば、データベースやAPI)に依存せずにテストできます。これは、テストが外部システムの状態や動作に左右されません。

まとめ

上記の内容からもわかるように、モックを適切に活用することで、安定したテストが実現できます。
jUnitを実装する際には、モックを上手に活用して、テストの信頼性と効率を高めていければと思います!

0
1
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
1