zoukankan      html  css  js  c++  java
  • 用PowerMock mock 由工厂方法产生的对象

    有些对象需要mock的对象是由工厂方法产生出来的,而工厂方法一般是静态方法,这时候就需要同时mock工厂方法及对象

    被测方法:

    public class EmployeeServiceFactory {
        public void saveEmployee(Employee employee){
            EmployeeDaoFactory dao = EmployeeDaoFactory.newInstance();
            method("powermock");
            dao.addEmployee(employee);
        }
        
        public void method(String str){
            throw new UnsupportedOperationException();
        }
    }
    public class EmployeeDaoFactory {
        private EmployeeDaoFactory(){
            
        }
        
        public static EmployeeDaoFactory newInstance(){
            return new EmployeeDaoFactory();
        }
        
        public void addEmployee(Employee employee) {
            throw new UnsupportedOperationException();
        }
        
    }

    测试类:

    @PrepareForTest(value={EmployeeDaoFactory.class})
    public class EmployeeServiceTestFactoryTest  extends PowerMockTestCase{
        
        @ObjectFactory
        public ITestObjectFactory getObjectFactory() {
            return new PowerMockObjectFactory();
        }
        
        @Test
        public void addEmployee(){
            EmployeeDaoFactory employeeDao = PowerMockito.mock(EmployeeDaoFactory.class);
            try {
                PowerMockito.mockStatic(EmployeeDaoFactory.class);
                PowerMockito.when(EmployeeDaoFactory.newInstance()).thenReturn(employeeDao);
                EmployeeServiceFactory  service = PowerMockito.spy(new EmployeeServiceFactory());
                PowerMockito.doNothing().when(service).method(Mockito.anyString());
                Employee employee = new Employee();
                service.saveEmployee(employee);
                Mockito.verify(service).method("powermock");
                Mockito.verify(employeeDao).addEmployee(employee);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    flash 中无法导出swf文件的解决方法
    codeforces 341C Iahub and Permutations(组合数dp)
    CSS里的 no-repeat 是什么意思
    linux enable命令学习
    config large memory
    java中集合杂记
    Linux操作系统以及各大发行版介绍——Linux operating system and major distribution is introduced
    KVM几种缓存模式
    Elastic-Job
    日交易额百亿级交易系统的超轻量日志实现
  • 原文地址:https://www.cnblogs.com/changzhz/p/5163651.html
Copyright © 2011-2022 走看看