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%にするにはこのような使い方もするかと思います。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント