PowerMock mock私有方法】的更多相关文章

import java.util.Random; public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if (doTheGamble("Whatever", 1 << 3)) { throw new RuntimeException("boom"); } } private boolean doTheGamble(String whatever, int bin…
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂,复杂到不值得编写,Mock模拟内部或外部依赖可以帮助我们解决这些问题 另一本TDD书的解释: (1)对象的结果不确定,如每获取当前时间,得到的结果都不一样,无法符合我们的预期: (2)实现这个接口的对象不存在: (3)对象速度缓慢 对于TDD还有一个更重要原因:通过模拟可以隔离当前方法使用的的所有…
话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我说,写这个很麻烦啊,代码很乱,你得mock一堆. 既然已经跳进去了,那就游一会儿吧.为了mock,可谓想尽了办法啊,从一般的mock工具mockito,到java的反射,最后发现一个强大的工具——PowerMockito   他居然能够mock私有方法.虽然,最后被老大们说私有方法是不应该mock的…
在编写代码时,经常需要调用别人已经写好的工具类,而这些工具提供的方法经常是static方法,在这里,直接贴出<PowerMock实战手册>中的例子 待测试方法: public class EmployeeService { public int getEmployeeCountWithStatic() { return EmployeeUtils.getEmployeeCount(); } } 引用的工具类 public class EmployeeUtils { public static…
有些对象需要mock的对象是由工厂方法产生出来的,而工厂方法一般是静态方法,这时候就需要同时mock工厂方法及对象 被测方法: public class EmployeeServiceFactory { public void saveEmployee(Employee employee){ EmployeeDaoFactory dao = EmployeeDaoFactory.newInstance(); method("powermock"); dao.addEmployee(em…
依赖:这个很重要,不同版本用法也有点区别: <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>2.0.2-beta</version> <scope>test</scope> </dependency> <dependency> <group…
在开发时,经常遇到这种情况,被测试方法所调用的类不是通过构造注入的,而是通过临时new出来的,如下面待测方法: public class EmployeeService { private EmployeeDao employeeDao; public int getTotalEmployeeWithTempVariable() { EmployeeDao employeeDao = new EmployeeDao(); return employeeDao.getTotal(); } } em…
<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.6.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.power…
现实的业务场景中,可能需要对Spring的实现类的私有方法进行测试. 场景描述: 比如XXXService里有 两个函数a.函数b. 而实现类XXXServiceImpl中实现了函数a.函数b,还包含私有方法函数c和函数d. 要写一个XXXTestController来调用XXXServiceImpl的函数c. 面临几个问题: 1.如果注入接口,则无法调用实现类的私有类. 2.如果注入实现类,则需要将实现类里的私有方法改为公有的,而且需要设置@EnableAspectJAutoProxy(pro…
实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在@implementation中定义的成员变量在其他类中无法查看 也无法访问 在@implementation中定义的私有变量只能在本类中访问 如果只有方法的实现没有方法的声明 这个方法就是私有方法…