使用PowerMockito 对静态类进行mock

Mock的中文的意思就是模拟,Mockito是mock的扩展,可是Mockito并不支持对静态类的mock,因此咱们引入PowerMockito实现对静态类的mock.java

首先pom添加PowerMockito 的 jar包引用,注意相应的版本号。不然会出现jar包冲突异常。json

            <dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
			<version>1.10.8</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-api-mockito</artifactId>
			<version>1.6.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-module-junit4</artifactId>
			<version>1.6.1</version>
			<scope>test</scope>
		</dependency>
                   dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
                        <version>4.12</version>
			<scope>test</scope>
		</dependency>

  如例咱们须要对LogUtil.class 的 静态方法进行mock,类格式以下,该类的两个方法均为静态方法。api

public class LogUtil {

        public static BaseAuditLog getLogBean(String operContent){
		return null;		
	}
	
	 public static void  saveLog(String context){
		
	 }

 使用PowerMockito 测试类以下 :单元测试

@RunWith(PowerMockRunner.class)  //1.
@PrepareForTest({LogUtil.class}) //2.
public class AddressBookServiceTest_mock {


    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }
   @Test
    public void test_staticMethod_PowerMock()  { 
        //绕过静态类
        PowerMockito.mockStatic(LogUtil.class);//3.绕过静态类
        when(LogUtil.getLogBean(json)).thenReturn(new SensitiveInfoOperationLog());//4.预设静态类返回值
String response = addressBookServiceImpl.queryAddressBookFuzzy(json); } }

以上即可以实现的静态类的mock.测试

由于要实现单元测试,还须要实现对类成员变量进行mock.this

有两种主要方法spa

1.经过继承方式实现.net

2.经过反射的方式实现code

详细信息参考连接   http://blog.csdn.net/fenglibing/article/details/16842655blog

反射具体示例以下:

public     class     Address{
          boolean querySwitch= false  
}

public     class     Address_test{
        private Address    address;
        
        public void test_Address(){
        //经过反射改变类成员变量值
        boolean querySwitch=false;
        Field  field=address.getClass().getDeclaredField("querySwitch");
        field.setAccessible(true);
        field.set(address,querySwitch);
    }
  
}    
相关文章
相关标签/搜索