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的构造行为并返回实例

  • 相关阅读:
    一个喜欢研究车的80后开车人,自己的经验和感受
    35岁前务必成功的12级跳(男女通用) 转
    如何注册ocx文件
    plsql连接oracle数据库
    float过后 高度无法自适应的解决方法
    Mysql 中文中繁杂的字 插入报错的 解决方案
    power designer 教程
    表单文本框输入时提示文字消失
    diskpart分盘代码
    linux svn 中文 https://my.oschina.net/VASKS/blog/659236
  • 原文地址:https://www.cnblogs.com/changzhz/p/5162212.html
Copyright © 2011-2022 走看看