[英]Mocking a Static Method without replayAll() in PowerMock
有誰知道一種無需調用replayAll()即可模擬靜態類的方法嗎? 我看過很多例子,人們在其中模擬Math.random()並使用replayAll()。 在我看來,replayAll()是處理問題的懶惰方式,但是我一直無法找出一種使用replay(Object嘲笑)來模擬靜態方法的方式。
例如,考慮下面在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.replay([object_name])來執行此操作,這樣您就不必全部重播。 對於此示例,它看起來如下所示:
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.replay(Math.class);
assertEquals (12, die.sumOfNumDieRolls(4));
assertEquals (30, die.sumOfNumDieRolls(10));
PowerMock.verify(Math.class);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.