社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

JMockit でメソッド内から呼び出しているメソッドのみをモックする

表記のとおりです。
例えば、以下のような methodA と methodB があった場合、junitテストで methodA を呼び出した時の methodB の振る舞いを変更したいということです。
※戻り値を 5 以外にしたい

public class PartialMock {
  public int methodA(int a) {
    int b = methodB();
    return a + b;
  }

  public int methodB() {
    return 5;
  }
}

JMockit ではパーシャルモックという機能が使えるようです。
(Partial Mock: 部分的なモック)

下記のように、Expectations の引数にインスタンスを渡して、振る舞いを変えたいメソッドを定義してあげます。
こうすることで、methodB の戻り値が 5 -> 10 に変わります。

@Test
public void testMethodA_WithPartialMock() {
  final PartialMock partialMock = new PartialMock();
	
  // changed behavior of methodB
  new Expectations(partialMock) {{
    partialMock.methodB(); result = 10;
  }};
	
  assertThat(partialMock.methodA(5), is(15));
}

これも簡単に使えるし、強力な機能だと思います。
テスト対象クラス
テストクラス