在编写单元测试用例时,或多或少会遇到一些问题,大多数是由于对测试框架特性 不熟悉导致,比如:
• Mockito 不支持对静态方法、构造方法、final 方法、私有方法的模拟; • Mockito 的 any 相关的参数匹配方法并不支持可空参数和空参数; • 如果为 Mock 方法或 Mock 方法参数不匹配时,会返回默认值(基础类型为 0, 对象类型为 null); • 采用 Mockito 的参数匹配方法或 Argument 的 captor 方法时,其它参数不能直 接用常量或变量,必须使用 Mockito 的 eq 方法包装; • 使用 when-then 语句模拟 Spy 对象方法会先执行真实方法,应该使用 do-when 语句; • PowerMock 对静态方法、构造方法、final 方法、私有方法的模拟需要把对应的 类添加到@PrepareForTest 注解中; • PowerMock 模拟 JDK 的静态方法、构造方法、final 方法、私有方法时,需要把 使用这些方法的类加入到@PrepareForTest 注解中,从而导致单元测试覆盖率 不被统计; • PowerMock 使用自定义的类加载器来加载类,可能导致系统类加载器认为有类 型转换问题;需要加上@PowerMockIgnore({"javax.crypto.*"})注解,来告诉 PowerMock 这个包不要用 PowerMock 的类加载器加载,需要采用系统类加载 器来加载; • 如 果 遇 到 Mock 对 象 静 态 常 量 初 始 化 失 败 ,可以 利 用 注 解 @SuppressStaticInitializationFor 抑制静态常量初始化。
以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。