java – 使用Mockito进行单元测试时避免使用最终方法?
Mockito不允许嘲笑最终方法.
在代码中使用最终方法被认为是不好的做法吗?为什么? 我不想仅仅为了使测试代码工作而改变实现细节,但是,测试框架通常会有这些规则来鼓励更好的编码实践. 解决方法
最终的方法绝对不是一般的做法:它们传达了一个关于方法的行为和语义的特定信息 – 也就是说,任何调用该方法的人都将获得完全相同的实现.这正是您试图通过模拟颠覆的属性,因为您通过(动态生成的)子类重写最终实现来代替执行存根行为.
为此,如果您有一个实现,您可以控制您尝试使用存根替换测试,那么它可能不应该是最终的,因为您在测试中将其视为非最终方法.您的测试是组件的另一个用户,您可以相应地设计一个用户. 在您无法控制的实现中,例如第三方库,PowerMock是一种普遍接受的模拟构造函数的解决方案,以及私有,静态和最终方法,可能在最终类中.但是,PowerMock确实存在一些危险: >模拟有额外的复杂性:PowerMock通过一个特殊的类加载器来重写类本身,而不是通过Java的OOP方法调度,所以你必须明确地列出调用最终和静态方法的类,因此Powermock可以替换那些电话. 就“最佳实践”而言,真正的最佳实践是OOP原则jgitter上面提到:“Program to interfaces,not implementations.”依靠显式接口: > …你非常清楚你正在与之交互的对象的合同. 也就是说,Mockito存在具体类的简易性使其成为一个诱人的选择,但请注意,最简单的语义正确答案可能是从需要存根的特定方法中删除final. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 怎么提供假数据?
- java.lang.NoSuchMethodError:org.apache.log4j.Logger
- java servlet手机app访问接口(三)高德地图云存储及检索
- Java手写服务器(一)
- 如何使用私有Java类进行有效的API设计
- Java:JFrame.setLocationRelativeTo(null)不以Ubuntu 10.0
- Java获取精确到秒的时间戳方法
- 在SpringBoot中使用Logback管理记录日志
- java – 在等待退出信号时处理InterruptedException(Androi
- java – Spring Boot JPA QueryDSL =未找到OrderSpecifier