Кто-нибудь знает способ сделать издевательский статический класс без вызова replayAll()? Я видел много примеров, когда люди издеваются над Math.random() и используют replayAll(). Мне кажется, что replayAll() - это более ленивый способ заниматься вещами, но я не смог найти способ использовать повтор (Object mocks), чтобы имитировать статические методы.Издевательский статический метод без replayAll() в PowerMock
Для примера рассмотрим следующий пример, который я нашел на 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
PowerMock.replay (Math.class) работает для меня с тем же кодом, я только изменил эту строку и версию до 1.4.10. EDIT: PowerMock.verify (Math.class) также работает – cahen