我有一个包含字符串比较的方法:
java.net.InetAddress#isReachable()
在单元测试中,我尝试过:
if (stringA.equals(stringB)) { ... }
但这实际上会回归真实。谁能告诉我如何通过PowerMockito模拟String#equals方法?感谢。
答案 0 :(得分:1)
除了模仿最终方法 hard 之外;特别是当你试图将这样的核心类操作为java.lang.String时;这里的真实点具有不同的性质:它只是错误来覆盖测试的String.equals()。
简单地说:如果你的逻辑依赖于比较两个对象,那么你应该专注于提出一种设计,允许你注入这两个值中的至少一个 - 而不是使用脏脏黑客操纵相应的等于方法的内部!
但是如果您的设计是这样的,您认为您需要PowerMockito才能使其可测试(通过覆盖String.equals())方法;最有可能的是:您只是首先创建了 untestable 代码。
因此我的“不回答”。退出当前的方法,查看这些videos以了解如何编写可测试的代码;然后回来重新设计你的设计。
人们常常创建一个破碎的设计;然后他们认为 PowerMock(ito)是“修复”破坏设计后果的方法。而且往往是完全相反的:如果你认为你需要PowerMock(ito),那么你的设计应该重新设计。
答案 1 :(得分:0)
Java字符串是最终类,因此您必须使用模拟最终策略,例如@PrepareForTest(ClassWithFinal.class)
https://github.com/jayway/powermock/wiki/mockfinal
我会重新考虑这样做的原因,你应该重构测试而不是模拟核心java类。 Why is String class declared final in Java?