JMockit で System.currentTimeMillis を Mock 化する

JMockit で java.util.Calendar のメソッドを Mock 化する - kntmr-blog

上記のエントリでは java.util.Calendar#getTimeInMillis を Mock 化してミリ秒を取得する例を挙げましたが、そもそもミリ秒を取得するだけなら java.lang.System#currentTimeMillis を使うよね、という話。

で、java.lang.System#currentTimeMillis を Mock 化する場合。

@Mocked
System system;
@Test
public void test() {
    final long expected = 1234567890000L;
    new Expectations() {
        {
            System.currentTimeMillis(); result = expected;
        }
    };
    long actual = System.currentTimeMillis(); // 1234567890000 が返る
    assertThat(actual, is(expected));
}

今回、MockUp<T> ではなく Expectations で Mock 化してみた。ただ、@Mocked System system; って場合によっては影響範囲が大きそう…。JMockit の仕組み上、しょうがないのかもしれないけど。