java - Java Mocking - 在外部类中注入`equals`和`toString`
问题描述
在尝试测试与外部 API 的接口时,我遇到了一些麻烦。特别是说 API 用于数据存储的大量类equals
和toString
方法没有,这使得比较 API 是否创建了我期望的对象非常困难,因为它们以大量复杂的列表映射组合返回。如果我想手动检查相等性,我每次都必须编写自定义的深度相等性检查。
所以我想知道是否可以使用 PowerMock、Mockito 和 JUnit 4(这是我的测试环境)将自定义实现eqauls
(甚至可能toString
)注入到该类中。或者是否有办法告诉 JUnit 使用自定义方法来比较这些数据类的对象。
欢迎与该设置良好集成的库。
解决方案
这些方法与您仅编写代理对象相同,例如:
public class A {
int c;
int d;
}
public class B extends A {
@Override
public boolean equals(Object o) {
if (o instanceof A) {
A a = (A) o;
return this.c == a.c && this.d == a.d;
} else {
return false;
}
}
@Override
public String toString() {
return "B [c=" + c + ", d=" + d + "]";
}
}
您不能可靠地更改底层类 ( A
) 的实现,而不会冒着在代码中其他地方传播异常的风险,这些异常可能依赖于toString
to的行为equals
,这不太可能,但下次停止工作时这仍然是一个问题。如果您只是在测试中而不是在生产中执行此操作,那么这可能是可以接受的,您可以咨询该领域的现有问题,例如是否可以在运行时覆盖方法?
推荐阅读
- python - python not excecuting if statement
- c# - I want to make enemies look at player when they spawn in
- python - 如何在不下载 mp3 的情况下将音频从 pytube 流式传输到 discord.py?
- vb.net - 当 2 个用户使用同一个程序时出现问题
- javascript - 如何访问 div 中的图像属性?jQuery
- selenium - Google 搜索按钮的元素名称是什么?
- javascript - 如何将 JavaScript 中的主机名和布尔值与 if/else 进行比较以在 Mongo Shell 中执行?
- python - 如何使用循环来减少python中的代码
- python - 在 Python 中关闭文件
- javascript - 如何使用switch语句查找json对象中是否存在键值对