假设我有一个没有equals()方法的类,它没有源代码。我想在该类的两个实例上声明相等。
我可以做多个断言:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
我不喜欢这个解决方案,因为如果早期断言失败,我无法获得完全的平等性。
我可以自己手动比较并跟踪结果:
String errorStr = "";
if(!obj1.getFieldA().equals(obj2.getFieldA())) {
errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n";
}
if(!obj1.getFieldB().equals(obj2.getFieldB())) {
errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + "\n";
}
...
assertEquals("", errorStr);
这给了我一幅完整的平等图,但很笨拙(我甚至没有考虑可能出现的空问题)。第三个选项是使用Comparator,但compareTo()不会告诉我哪些字段未通过相等。
有没有更好的实践可以从对象中得到我想要的东西,而不需要子类化和重写equals(呃)?
我通常使用org实现这个用例。阿帕奇。平民lang3。建设者等式生成器
Assert.assertTrue(EqualsBuilder.reflectionEquals(expected,actual));
Mockito提供了一个反射匹配器:
对于最新版本的Mockito使用:
Assert.assertTrue(new ReflectionEquals(expected, excludeFields).matches(actual));
对于旧版本,请使用:
Assert.assertThat(actual, new ReflectionEquals(expected, excludeFields));
这里有许多正确的答案,但我也想补充我的版本。这是基于Assertj。
import static org.assertj.core.api.Assertions.assertThat;
public class TestClass {
public void test() {
// do the actual test
assertThat(actualObject)
.isEqualToComparingFieldByFieldRecursively(expectedObject);
}
}
更新:在Assertjv3中。13.2正如Woodz在评论中指出的那样,这种方法是不推荐的。目前的建议是:
public class TestClass {
public void test() {
// do the actual test
assertThat(actualObject)
.usingRecursiveComparison()
.isEqualTo(expectedObject);
}
}
因此,上述结构在ClassA中也同样存在。 假设我想编码2个其他类ClassC(使用ClassA的实例)和ClassD(使用ClassB的实例)。除了ClassA和ClassB的实例之外,ClassC和ClassD的代码完全相同。 从示例中可以看出,ClassC和ClassD具有相同的功能,但对tmp使用了不同的类
我有类,它只使用id属性定义equals。它还有另一个方法(称为“are同”),它检查给定参数是否具有与此对象属性相等的一些重要属性(并且它忽略id)。 在测试中,我想检查两个集合是否使用arame as“custom equals”方法相同(最好忽略顺序,不依赖hashCode,这显然与arame不一致)。 我想知道,是否有比写包装纸更简单的方法。写这样的东西会更愉快 Hamcrest示例在处理
本文向大家介绍如何判断两个对象相等?相关面试题,主要包含被问及如何判断两个对象相等?时的应答技巧和注意事项,需要的朋友参考一下 提供另一种写法: 当然JSON.stringify(obj)==JSON.stringify(obj)执行速度是最快的
我在Codewars.com参加培训测试, 说明是: 在此kata中,您必须在给定字符串的情况下,用字母在字母表中的位置替换每个字母。 如果文本中的任何内容不是字母,请忽略它,不要返回它。“A”=1,“B”=2. 我已经制作了这样的PHP脚本 但当我提交我的答案时,它包含的错误就像 请谁能帮忙修一下?告诉我为什么它显示错误的细节?
问题内容: 我一直在四处张望,我至少找到了一个不清楚的答案。 我正在使用GUI构建一个非常基本的聊天应用程序,并且已经将GUI与连接对象分离了。现在,我需要在服务器类中从GUI调用一种方法,反之亦然。但是我不太了解如何做到这一点(即使使用“ this”也是如此)。这是一部分代码的样子(这是一个名为server_frame的类): 这是来自server_frame的代码,srv是另一个类(服务器)中
更新 更准确地说。我想知道这两个列表是否有相同的对象,两个列表都没有额外的对象,顺序无关紧要。例如: