JMockito を使ってみる ( static メソッド、private メソッドのモック化 )
JMockito を使って1. static メソッドのモック化、2. private メソッドのモック化を行なうサンプルコードを書いてみたので、メモを残しておきます。
今回は Maven 使ってやることにしました。pom.xml の記述内容は以下に。
・JMockit - Tutorial - Introduction
http://jmockit.org/tutorial/Introduction.html#runningTests
※ .jar ダウンロードしてやりたい場合は以下からダウンロード。
・The JMockit testing toolkit
http://jmockit.org/index.html
細かいところはドキュメントに譲りまして ( おいおい・・・ )、テスト対象コードとそのテストケースだけ並べます。
1. static メソッドのモック化
* テスト対象コード
package jmockito.sample; public class JMockitStaticSample { public static String staticMethod(String s) { String result = null; // something... return result; } }
* テストケース
package jmockito.sample; import mockit.Expectations; import mockit.Mocked; import org.junit.Assert; import org.junit.Test; public class JMockitStaticSampleTest { @Mocked private JMockitStaticSample jss; @Test public void test() { new Expectations() {{ JMockitStaticSample.staticMethod("hoge"); result = "staticMethod hoge"; JMockitStaticSample.staticMethod("uga"); result = "staticMethod uga"; }}; Assert.assertEquals("staticMethod hoge", JMockitStaticSample.staticMethod("hoge")); Assert.assertEquals("staticMethod uga", JMockitStaticSample.staticMethod("uga")); } }
2. private メソッドのモック化
* テスト対象コード
package jmockito.sample; public class JMockitPrivateSample { private int privateMethod1(int i) { // something... return 0; } private String privateMethod2(String s) { // something... return null; } public int callPrivateMethod1(int i) { return privateMethod1(i); } public String callPrivateMethod2(String s) { return privateMethod2(s); } }
* テストケース
package jmockito.sample; import static mockit.Deencapsulation.invoke; import mockit.Expectations; import org.junit.Assert; import org.junit.Test; public class JMockitPrivateSampleTest { @Test public void test() { JMockitPrivateSample jps = new JMockitPrivateSample(); new Expectations(JMockitPrivateSample.class) {{ invoke(jps, "privateMethod1", 1); result = 1; invoke(jps, "privateMethod2", "hoge"); result = "hoge"; }}; Assert.assertEquals(1, jps.callPrivateMethod1(1)); Assert.assertEquals("hoge", jps.callPrivateMethod2("hoge")); } }
※ private メソッドだけを部分的にモック化 ( Partial mocking ) している感じです。
全然ちゃんと読んでませんが、ドキュメントは以下あたりに。
・JMockit - Tutorial - Mocking
http://jmockit.org/tutorial/Mocking.html
相当に粗い内容ですが、以上です。