2013-03-18 5 views
1

Кто-нибудь знает способ сделать издевательский статический класс без вызова 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.

+0

Очевидно, вы можете сделать «PowerMock.verify (Math.class);», который должен работать. – HardcoreBro

+0

PowerMock.replay (Math.class) работает для меня с тем же кодом, я только изменил эту строку и версию до 1.4.10. EDIT: PowerMock.verify (Math.class) также работает – cahen

ответ

0

Вы можете сделать это с помощью PowerMock.replay ([имя_объекта]), чтобы вам не нужно было повторять все. В этом примере это будет выглядеть так:

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); 
    } 
}