JMockitでブレークポイントが止まらない時の対処法

以下のようなクラスがあるとします。

public class Logic {
  public int execute() {
    int ret = -1;

    ret = メソッド1();
 
    if (ret == 0) {
      ret = メソッド2();
    } else {
      ret = メソッド3();
    }
  }

  private int メソッド1() {
    ~
    ~
    return 0;
  }

  private int メソッド3() {
    ~
    ~
    return 0;
  }

private int メソッド2() {
    ~
    ~
    return 0;
  }
}

executeメソッドをinvokeしてメソッド1をモック化して、戻り値を0以外を返すようにしたいと思います。

テストクラスは以下のようになります。

public void test01() {

  new MockUp<Logic>() {
    @Mock
    private int メソッド1() {
      return -1;
    }
  };
  Deencapsulation.invoke(new Logic(),"execute");
}

このように、publicメソッドをinvokeして、privateメソッドが複数存在するクラスで一つでもモック化します。

すると、execute部分でブレークポイントを貼っても止まらなくなります。(多分この条件だと思います)

これを止めるようにするには、テストクラスのtest01でブレークポイントを貼り、テストを実行します。

ブレークポイントで止まったら、executeメソッドにブレークポイントを貼ります。

すると、executeでも止まるようになります。

こんなことをせずにexecuteでブレークポイントで止めるようにするには、全てのprivateメソッドをモック化すれば止まるようになります。

以下みたいな感じです。

public void test01() {

  new MockUp<Logic>() {
    @Mock
    private int メソッド1() {
      return -1;
    }
    @Mock
    private int メソッド1() {
      return 0;
    }
    @Mock
    private int メソッド1() {
      return 0;
    }
 };
 Deencapsulation.invoke(new Logic(),"execute"); }

カバレッジを100%にするにはこのような使い方もするかと思います。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA