JMockitではstaticメソッドもモックすることができる。やり方は簡単。通常のstaticメソッドを呼ぶのと同じように「クラス名.メソッド()」の形式で記述するだけである。
new Expectations() {{
MyCalendar.getToday();
result = "2015/12/01";
}};
ここで注目すべきは@Mockedでモックするのはインスタンスであるのに、staticメソッドもモックが可能ということである。
以下サンプルコード。
package mockittest4;
import static org.junit.Assert.*;
import org.junit.Test;
import mockit.Expectations;
import mockit.Mocked;
public class MockitTest {
@Mocked
private MyCalendar myCal;
@Test
public void testIsDecember() {
new Expectations() {{
// staticメソッドのモック
MyCalendar.getToday();
result = "2015/12/01";
}};
Sample sample = new Sample();
assertTrue(sample.isDecember());
}
}
Sample.java
package mockittest4;
public class Sample {
/** 現在日が12月か判定 */
public boolean isDecember() {
String month = MyCalendar.getToday().split("/")[1];
if("12".equals(month)){
return true;
}
return false;
}
}
MyCalendar.java
package mockittest4;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class MyCalendar {
// staticメソッド
public static String getToday() {
Calendar cal = Calendar.getInstance();
return new SimpleDateFormat("yyyy/MM/dd").format((cal.getTime()));
}
}