新聞中心
EasyMock和Mockito等框架,對(duì)static, final, private方法均是不能mock的。 這些框架普遍是通過(guò)創(chuàng)建Proxy的方式來(lái)實(shí)現(xiàn)的mock。 而PowerMock是使用CGLib來(lái)操縱字節(jié)碼而實(shí)現(xiàn)的mock,所以它能實(shí)現(xiàn)對(duì)上面方法的mock。今天先來(lái)看一個(gè)簡(jiǎn)單的例子吧:

成都創(chuàng)新互聯(lián)專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,服務(wù)器托管,服務(wù)器托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。
***個(gè)注解是指定Runner
第二個(gè)是你要測(cè)試的類,這個(gè)里面調(diào)用了靜態(tài)類
下面我結(jié)合EasyMock給一個(gè)簡(jiǎn)單的例子:
Java代碼
- import java.io.IOException;
- public class SystemPropertyMockDemo {
- public String getSystemProperty() throws IOException {
- return System.getProperty("property");
- }
- }
Java代碼
- import org.easymock.EasyMock;
- import org.junit.Assert;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.powermock.api.easymock.PowerMock;
- import org.powermock.core.classloader.annotations.PrepareForTest;
- import org.powermock.modules.junit4.PowerMockRunner;
- @RunWith(PowerMockRunner.class)
- @PrepareForTest({SystemPropertyMockDemo.class})
- public class SystemPropertyMockDemoTest {
- @Test
- public void demoOfFinalSystemClassMocking() throws Exception {
- PowerMock.mockStatic(System.class);
- EasyMock.expect(System.getProperty("property")).andReturn("my property");
- PowerMock.replayAll();
- Assert.assertEquals("my property",
- new SystemPropertyMockDemo().getSystemProperty());
- PowerMock.verifyAll();
- }
- }
測(cè)試用例里面增加了PrepareForTest注解,表明要測(cè)試的類,里面包含靜態(tài)方法的調(diào)用。
然后在測(cè)試類里面指定要測(cè)試的靜態(tài)類和它的方法。
實(shí)際上PowerMock是在EasyMock上面做了擴(kuò)展,這些寫法都是和EasyMock相同的。
今天先寫這么一個(gè)簡(jiǎn)單的例子,然后以后會(huì)將用到的都寫上來(lái)。
當(dāng)然了,更多的可以參考:
http://code.google.com/p/powermock/
另外它的maven依賴如下,我在使用的時(shí)候就弄錯(cuò)了
Xml代碼
org.powermock groupId> powermock-module-junit4 artifactId> 1.4.8 version> test scope> - dependency>
org.powermock groupId> powermock-api-easymock artifactId> 1.4.8 version> test scope> - dependency>
分享文章:使用PowerMock來(lái)Mock靜態(tài)函數(shù)
文章出自:http://www.5511xx.com/article/dhocphg.html


咨詢
建站咨詢
