1
有沒有人知道如何在不調用replayAll()的情況下對靜態類進行模擬?我看到很多例子,人們嘲笑Math.random()並使用replayAll()。對我來說,似乎replayAll()是關於事物的懶惰方式,但我一直無法找出使用重放(對象嘲諷)來嘲諷靜態方法的方法。在PowerMock中不使用replayAll()來模擬靜態方法
例如,考慮下面的例子中,我在 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。
顯然你可以做一個'PowerMock.verify(Math.class);'它應該工作。 – HardcoreBro 2013-04-16 16:18:51
PowerMock.replay(Math.class)爲我工作的代碼非常相似,我只將這一行和版本更改爲1.4.10。 編輯:PowerMock.verify(Math.class)也在工作 – cahen 2013-04-20 09:47:17