zoukankan      html  css  js  c++  java
  • 用PowerMock mock 临时变量

    在开发时,经常遇到这种情况,被测试方法所调用的类不是通过构造注入的,而是通过临时new出来的,如下面待测方法:

    public class EmployeeService {
        private EmployeeDao employeeDao;
    
    
        public int getTotalEmployeeWithTempVariable() {
            EmployeeDao employeeDao = new EmployeeDao();
            return employeeDao.getTotal();
        }
    }

    employeeDao是临时new出来的,而mockito和easyMock一般是通过代理来实现mock,这时就无法mock此类方法了。

    而PowerMock通过直接修改class,使这类方法可测,

    @PrepareForTest(EmployeeService.class)
    public class EmployeeServiceTest extends PowerMockTestCase {
    
        EmployeeService employeeService;
    
        @ObjectFactory
        public ITestObjectFactory getObjectFactory() {
            return new PowerMockObjectFactory();
        }
        @BeforeMethod
        public void init(){
             employeeService = new EmployeeService(employeeDao);
        }
        
        @Test
        public void testGetTotalEmployeeWithTempVariable() {
            try {
                PowerMockito.whenNew(EmployeeDao.class).withNoArguments()
                        .thenReturn(employeeDao);
                PowerMockito.when(employeeDao.getTotal()).thenReturn(10);
                int total = employeeService.getTotalEmployeeWithTempVariable();
                assertEquals(10, total);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    这里有三个很重要的地方:

    @PrepareForTest(EmployeeService.class):告诉PowerMock,需要修改EmployeeService的class文件

    @ObjectFactory:告诉testNG以对象工厂的形式创建测试实例

    extends PowerMockTestCase :继承此接口

    此外需要

    PowerMockito.whenNew(EmployeeDao.class).withNoArguments()
    .thenReturn(employeeDao);

    录制EmployeeDao的构造行为并返回实例

  • 相关阅读:
    oracle 3大范式 理解
    RobHess的SIFT代码解析之RANSAC
    RobHess的SIFT代码解析步骤四
    RobHess的SIFT代码解析步骤三
    RobHess的SIFT代码解析步骤二
    《我的十年图像生涯》—王郑耀(西安交通大学)
    图像卷积
    多尺度分析方法及表达方式
    图像处理中双线性插值
    程序面试题——C实现
  • 原文地址:https://www.cnblogs.com/changzhz/p/5162212.html
Copyright © 2011-2022 走看看