zoukankan      html  css  js  c++  java
  • 用PowerMock spy mock private方法

    在实际的工作中,经常碰到只需要mock一个类的一部分方法,这时候可以用spy来实现。

    被测类:

    public class EmployeeService {
    
        public boolean exist(String userName) {
            checkPrivateExist(userName);
            checkPublicExist(userName);
            return true;
        }
    
        private void checkPrivateExist(String userName) {
            throw new UnsupportedOperationException();
        }
        
        public void checkPublicExist(String userName){
            throw new UnsupportedOperationException();
        }
    }

    如果要测试exist方法,需要mock checkPublicExist和checkPrivateExist方法,而不希望mock exist方法

    测试类:

    @PrepareForTest(EmployeeService.class)
    public class EmployeeServiceTestWithPrivateTest  extends PowerMockTestCase{
        
        @ObjectFactory
        public ITestObjectFactory getObjectFactory() {
            return new PowerMockObjectFactory();
        }
    
        @Test
        public void testExist() {
            try {
                EmployeeService service = PowerMockito.spy(new EmployeeService());
                PowerMockito.doNothing().when(service,"checkPrivateExist","powermock");
                PowerMockito.doNothing().when(service).checkPublicExist("powermock");;
                boolean result = service.exist("powermock");
                Assert.assertTrue(result);
                Mockito.verify(service).checkPublicExist("powermock");
                PowerMockito.verifyPrivate(service).invoke("checkPrivateExist","powermock");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }

    在测试类中,真实的调用了exist方法。

    需要注意的是对private方法的mock

    PowerMockito.doNothing().when(service,"checkPrivateExist","powermock");

    以及对exist方法调用过程的验证

    Mockito.verify(service).checkPublicExist("powermock");
    PowerMockito.verifyPrivate(service).invoke("checkPrivateExist","powermock");

  • 相关阅读:
    爱就是一个人一辈子
    硬件访问方法和混杂字符设备
    Linux内核等待队列
    深入浅出的讲解傅里叶变换(真正的通俗易懂)
    Linux用root强制踢掉已登录用户
    一文带你读懂宽带上下行速率不对称的原因
    FDD-LTE上下行带宽一样的,为什么上下行流量差别这么大
    linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系
    80211 发送速率选择算法分析
    imx6q 启动logo
  • 原文地址:https://www.cnblogs.com/changzhz/p/5163562.html
Copyright © 2011-2022 走看看