以下のようなクラスがあるとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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以外を返すようにしたいと思います。
テストクラスは以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
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メソッドをモック化すれば止まるようになります。
以下みたいな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^