replayAll() を呼び出さずに静的クラスのモックを作成する方法を知っている人はいますか? Math.random() をモックして replayAll() を使用する多くの例を見てきました。私には、 replayAll() が怠惰な方法のように思えますが、 replay(Object mocks) を使用して静的メソッドをモックする方法を見つけることができませんでした。
たとえば、 PowerMockTutorialで見つけた次の例を考えてみ ましょう。
public class Dice {
public int sumOfNumDieRolls (int num) {
int sum = 0;
for (int i=0; i<num; ++i) {
int roll = (int) (6. * Math.random()) + 1;
sum += roll;
}
return sum;
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest( {Dice.class} )
public class DiceTest {
@Test
public void shouldAddUpDieRollsCorrectly() {
PowerMock.mockStaticPartial(Math.class, "random");
EasyMock.expect (Math.random()).andReturn(0.3334).anyTimes();
Dice die = new Dice();
PowerMock.replayAll();
assertEquals (12, die.sumOfNumDieRolls(4));
assertEquals (30, die.sumOfNumDieRolls(10));
PowerMock.verifyAll();
}
}
PowerMock バージョン 1.4.10 を使用しています。