【发布时间】:2013-03-18 23:36:39
【问题描述】:
有谁知道不用调用 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 版。
【问题讨论】:
-
显然你可以做一个
PowerMock.verify(Math.class);应该可以工作。 -
PowerMock.replay(Math.class) 使用相同的代码为我工作,我只将这一行和版本更改为 1.4.10。编辑:PowerMock.verify(Math.class) 也在工作
标签: java unit-testing junit easymock powermock