Mockitoは、Javaのモック作成および
スタブ作成のためのオープンソースの
モックフレームワークです。
モックは、テストの際に
他のオブジェクトをシミュレート
または置き換えることができる
オブジェクトです。
ここでは、Mockitoの概要と
使い方を解説していきます。
Mockitoを使用すると、テスト時に
依存関係のあるオブジェクトをモック化して、
それらのオブジェクトの振る舞いを制御したり、
テストデータを提供したりすることができます。
これにより、テストの環境を制御し、
テスト対象のコードをより単独で
効果的にテストすることができます。
Javaのモック作成フレームワークとして
非常に人気があり、
柔軟性と簡潔さが特徴です。
1.モックオブジェクトの作成と設定
他のオブジェクトをモック化し、
そのモックオブジェクトの振る舞いを設定できます。
・メソッドの戻り値を指定
・例外をスロー
2.モックオブジェクトの検証
モックオブジェクトが
テスト中に適切に使用されたかどうかを
検証することができます。
モックオブジェクトに対して
呼び出されるメソッドや
引数の検証を行うことが可能です。
3.スタブの作成
テスト中に特定のメソッド呼び出しに対して
事前に定義した戻り値や
例外を提供するスタブを
作成することができます。
4.アノテーションのサポート
アノテーションを使用して
モックオブジェクトを簡単に作成
および注入するための
アノテーションサポートも提供しています。
クラスのモック化
モック化したメソッドを呼び出す場合
クラスをモック化します。
- 1:@Mockを付与
- 2:mock()メソッドを使用
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Sample01Test { @Mock // 1:モック化するクラスに@Mockを付与 private SampleA sampleA ; @Test public void test01() { // 2:mock()メソッドを使用してオブジェクト生成 SampleA sampleA = mock(SampleA.class); } } |
挙動を定義しなかったメソッドは nullを返却する
テスト対象クラスにモックを注入
@InjectMocksアノテーションを付与して
テストクラスに対して自動的に
依存関係のモックオブジェクトを注入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@RunWith(MockitoJUnitRunner.class) public class Sample01Test { @InjectMocks private SampleA sampleA ;// モックオブジェクトが注入されるフィールド @Mock private RepositoryA repositoryA ;// モックオブジェクト @Test public void test01() { // テストメソッドの内容 } } |
@Mockアノテーションや
MockitoAnnotations.initMocks()メソッドを使用する
public メソッドの返却値を任意の値に設定する方法
1.thenReturn()メソッド
Mockito.when(モックインスタンス).メソッド(任意の引数).thenReturn(任意の返却値);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@Test public void myMethodTest() { // モックオブジェクトの作成 MyDependency dependency = Mockito.mock(MyDependency.class); // モックオブジェクトのメソッド呼び出しに振る舞いや戻り値を指定 Mockito.when(dependency.someMethod()).thenReturn("mockValue"); // テスト対象のメソッドを実行 MyClass myClass = new MyClass(dependency); String result = myClass.myMethod(); // 戻り値が期待通りの値であることを検証 assertEquals("mockValue", result); } |
2.doReturn()メソッド(呼出回数:1回)
Mockito.doReturn(任意の返却値).when(モックインスタンス).メソッド(任意の引数);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@Test public void myMethodTest() { // モックオブジェクトの作成 MyDependency dependency = Mockito.mock(MyDependency.class); // モックオブジェクトのメソッド呼び出しに戻り値を指定 Mockito.doReturn("mockValue").when(dependency).someMethod(); // テスト対象のメソッドを実行 MyClass myClass = new MyClass(dependency); String result = myClass.myMethod(); // 戻り値が期待通りの値であることを検証 assertEquals("mockValue", result); } |
3.doReturn()メソッド(呼出回数:複数回)
Mockito.doReturn(任意の返却値).when(モックインスタンス).メソッド(任意の引数);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@Test public void myMethodTest() { MyDependency dependency = Mockito.mock(MyDependency.class); // メソッド呼び出し回数に応じて異なる値を返却する Mockito.doReturn("firstValue").when(dependency).someMethod(); Mockito.doReturn("secondValue").when(dependency).someMethod(); Mockito.doReturn("thirdValue").when(dependency).someMethod(); MyClass myClass = new MyClass(dependency); // メソッドを呼び出して結果を確認する String result1 = myClass.myMethod(); // "firstValue"を返す String result2 = myClass.myMethod(); // "secondValue"を返す String result3 = myClass.myMethod(); // "thirdValue"を返す assertEquals("firstValue", result1); assertEquals("secondValue", result2); assertEquals("thirdValue", result3); } |
拡張for文を使ったメソッドの呼出回数によって
返却値(List)を変更する方法はこちら
public void メソッドの場合
doNothing()メソッド
Mockito.doNothing().when(モックインスタンス).メソッド(任意の引数);
1 |
Mockito.doNothing().when(モックインスタンス).メソッド(任意の引数); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@Test public void myMethodTest() { // モックオブジェクトの作成 MyDependency dependency = Mockito.mock(MyDependency.class); // モックオブジェクトのメソッド呼び出しを定義 Mockito.doNothing().when(dependency).someMethod(); // テスト対象のメソッドを実行 MyClass myClass = new MyClass(dependency); myClass.myMethod(); // someMethodが呼び出されたかを検証 Mockito.verify(dependency).someMethod(); } |
モック化したメソッドの引数を検証する方法
ArgumentCaptor
ArgumentCaptor<型> 変数 = ArgumentCaptor.forClass(型.class);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@RunWith(MockitoJUnitRunner.class) public class MyClassTest { @Captor private ArgumentCaptor<String> captor; // キャプチャする引数の型 // @Captorを使用しない場合 //ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); @Mock private MyDependency dependency; // モックオブジェクト @Test public void myMethodTest() { // モックオブジェクトを使用してメソッド呼び出しを行う MyClass myClass = new MyClass(dependency); myClass.myMethod("test"); // 引数をキャプチャして検証する verify(dependency).otherMethod(captor.capture()); // キャプチャした引数の値を取得し、検証する String capturedValue = captor.getValue(); assertEquals("test", capturedValue); } } |
モック化したメソッドの呼び出し回数を検証する方法
verify()メソッド ※times(index)
Mockito.verify(モックインスタンス, times(index)).モックメソッド(引数);
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Test public void myMethodTest() { // モックオブジェクトの作成 MyDependency dependency = Mockito.mock(MyDependency.class); // モックオブジェクトを使用してメソッド呼び出しを行う MyClass myClass = new MyClass(dependency); myClass.myMethod(); myClass.myMethod(); // メソッド呼び出し回数を検証 Mockito.verify(dependency, Mockito.times(2)).someMethod(); } |
モック化したメソッドが一度も呼び出されなかったことを検証する方法
verify()メソッド ※never()
Mockito.verify(モックインスタンス, never()).モックメソッド(引数);
1 2 3 4 5 6 7 8 9 10 11 12 |
@Test public void myMethodTest() { // モックオブジェクトの作成 MyDependency dependency = Mockito.mock(MyDependency.class); // テスト対象のメソッドを実行 MyClass myClass = new MyClass(dependency); myClass.myMethod(); // メソッド呼び出しが一度も行われなかったことを検証 Mockito.verify(dependency, Mockito.never()).someMethod(); } |
今の年収に満足していますか?
同じ契約金で業務委託していても
在籍している会社によって給料が違います。
今と同じスキル・業務内容でも
年収が変わるということです。
さらに以下を考慮すると
より年収アップにつながります。
- スキルセットと需要
- 経験と実績
- 業界や地域の市場価値
- 転職時の交渉スキル
転職先の企業の給与体系や
業界の標準的な給与水準を調査し、
給与のみでなく、
福利厚生やキャリア成長の機会、
ワークライフバランスなどの要素も
総合的に考慮することが重要です。
Kindle Unlimitedは、Amazonが提供する
月額定額制の電子書籍サービスを活用します。
また、Kindle Unlimitedには、
体験版が提供されています。
体験版では、一定期間(通常は30日間)に限り、
Kindle Unlimitedのサービスを
無料で利用することができます。
1.豊富な書籍のラインナップ
Kindle Unlimitedには、幅広いジャンルの書籍が
数十万冊以上含まれています。
小説、ビジネス書、自己啓発書、
学術書、漫画など、
様々なテーマや興味に合わせて
多彩な選択肢があります。
2.サービスの内容を体験
体験版では、Kindle Unlimitedの全ての機能を使いながら、
豊富な書籍のラインナップや
読書体験を体験することができます。
自身の読書の好みや
利用頻度に合うかどうかを確認できます。
3.解約が可能
体験版期間中にKindle Unlimitedのサービスに
満足しなかった場合、
期限内に解約することができます。
その場合、追加料金はかかりません。
Kindle Unlimitedでは
さまざまなジャンルの書籍が提供されています。
ITエンジニアとしてスキルを向上させたり
新しい技術を学んだりする際に、
Kindle Unlimitedは
便利な資源となるのでおすすめです。
この記事へのコメントはありません。