以下のようなクラスがあるとします。
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級
コメント