前書き
もっと簡単に、だけどちょっとズルい方法で実現しました。
タイトルの通り、PowerMockitoを使います。
コード
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
public class MyTest {
@Test
public void test() {
final Integer a = mock(Integer.class);
when(a.intValue()).thenReturn(1, 2, 3);
assertTrue(a == 1 && a == 2 && a == 3);
}
}
ちょっと解説
PowerMockitoはご存知のとおり、final
クラスのモックをつくって、いろいろさせることができるライブラリです。
オートアンボクシングによりInteger
オブジェクトとプリミティブのint
を==
で比較できます。
また、オートアンボクシングでInteger#intValue
が呼ばれるので、このときに返す値を、PowerMockitoで順番に指定したのでした。