wiki@y-kurose

日々是好日。

ユーザ用ツール

サイト用ツール


サイドバー

サイドバー

プログラミング:java:jmockit:モックライブラリjmockitの初歩的な使い方

モックライブラリJMockitの初歩的な使い方

JMockit

  • Javaのモックライブラリの一つ
  • 実装や単体試験中に必要となるモックを作れる
  • 初歩的な使い方のみ書くが、ほかにも色々できる強力なライブラリ

入手

  • 公式サイトからダウンロードしてくるか、Mavenのpom.xmlに既述を追加
  • Eclipseでビルドパスを設定するときJMockitがjUnitより上になってないないとうまく動かないことがあるので注意

モックを作る

  • 作り方は3種類

アノテーション

public class テストクラス {
  @Mocked
  モックにするクラス mock;
 
  @Test
  public void テスト() {
    //なにかテスト
  }
}
  • とても簡単。もし、特定のメソッドだけモックにしたければ以下のようにすればよい
@Mocked(methods={"モックにするメソッド名"})
  • privateなメソッドも指定できるし、カンマで区切れば複数のメソッドも指定できる

メソッドの引数

public class テストクラス {
  @Test
  public void テスト(モックにしたいクラス mock) {
    //なにかテスト
  }
}
  • この場合はアノテーションを省略できる
  • テストごとにモックの内容も変えやすい

挙動を指定

@Test
public void テスト(@Mocked final モックにしたいクラス mock) {
  new Expectations() {{
    mock.doSomething(anyString); result = 123;
  }};
 
  //何かテスト
}
  • これは少し読みづらい
  • モックにしたmockのdoSomethingメソッドを何か適当なStringを引数にして実行すると「123」が返ってくる
  • これでロジックの実装がなくても期待結果を返すモックを作れる

テストする

  • 以下の順で行う
    1. モックの動作を定義
    2. テストしたいメソッドを実行
    3. モックが呼ばれたか(呼ばれてないか)を確認
public class テストクラス {
  @Mocked
  モックにするクラス mock;
 
  @Test
  public void テスト() {
    //動作定義
    new NonStrictExpectations() {
      {
        //モックにするクラスのmocked()が呼ばれたらtrueを返す
        mock.mocked(); result = true;
      }
    };
 
  //テスト対象を実行(中でmock.mocked()を呼んでいるメソッド)
  new テスト対象().テスト対象のメソッド();
 
  //呼ばれたかの確認
  new VerificationsInOrder() {
    {
      mock.mocked();
    }
  };
}
  • 動作定義と確認のところで使うクラスは他にも種類がある
  • 呼ばれる順番を気にするかとか、かかれてないメソッドが呼ばれたらNGにするとかを選べる
  • 引数があるメソッドのモックだと受け取ったものによって動作を変える事もできる

その他

privateなメンバーへのアクセス

//privateメソッドを呼ぶ
Deencapsulation.invoke(対象のオブジェクト, "メソッド名", メソッドのパラメータ...);
//privateなフィールドにセットする
Deencapsulation.setField(対象のオブジェクト, セットしたいオブジェクト);
  • これも合わせるとほどんどなんでもできる

実行速度

  • 結構遅い、テスト始まる前に時間がかかる印象


プログラミング/java/jmockit/モックライブラリjmockitの初歩的な使い方.txt · 最終更新: 2019/10/05 22:53 by y-kurose