PowerMock
Posted by Bruce Tsai
06/02/2016
PowerMock 也是一個單元測試模擬框架,它是在其它單元測試模擬框架的基礎上做出的擴展。通過提供定制的類加載器以及一些字節碼篡改技巧的應用,PowerMock 現了對靜態方法、構造方法、私有方法以及 Final 方法的模擬支持,對靜態初始化過程的移除等強大的功能。因為 PowerMock 在擴展功能時完全採用和被擴展的框架相同的 API,熟悉 PowerMock 所支持的模擬框架的開發者會發現 PowerMock 非常容易上手。 PowerMock 的目的就是在當前已經被大家所熟悉的接口上通過添加極少的方法和註釋來實現額外的功能,目前,PowerMock 僅支持 EasyMock 和 Mockito。
範例
@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();
}
}