Junit等于方法

时间:2014-02-16 01:08:58

标签: java testing junit equals equality

我只想知道是否有最佳实践或常用方法来测试对象中的equals实现。我的意思是被覆盖的测试方法。

public boolean equals(Object o)

我确实使用了这样的逻辑。 (假设数字和名称必须等于获得真实)

Dog d1 = new Dog(1,"Alvin");
Dog d2 = new Dog(2,"Alvin");

Assert.assertFalse(d1.equals(null));
Assert.assertFalse(d1.equals(d2));
d2.setId(1);
d2.setName("Kelvin");
Assert.assertFalse(d1.equals(d2));
d2.setName("Alvin");
Assert.assertTrue(d1.equals(d2));
Assert.assertTrue(d1.equals(d1));

但是当有很多字段时,这个任务非常庞大而且很无聊,所以我的问题是,是否有任何框架,工具,选项,任何使这更容易的东西,并且可以证明方法已被正确覆盖。感谢。

我知道覆盖方法equals取决于你需要的逻辑,还有测试用例创建,所以寻找一种标准的方法来测试方法,避免测试用例中的大代码,如果存在明显或任何建议你可能有。

2 个答案:

答案 0 :(得分:2)

查看重复问题的链接我读@ user598656回答并建议使用MeanBeans(自动java bean测试程序)

阅读文档后我发现了这个功能。

<强> 5.2.7。物业!意义!测试!算法! 属性显着性检验算法如下:

for each property in public getter/setter method pairs do 
 create instance of class under test, object x 
 create instance of class under test, object y 
 change property of y to contain a different value 
 if property is insignificant then 
 assert x.equals(y) 
 else 
 assert x.equals(y) is false 
 end if 
end for 

这就是我想要的,答案是最后一个,但在我看来,这符合我的需要。

答案 1 :(得分:2)

您可以使用Fast code ecllipse plugin的基于字段的模板。您可以编写一个简单的模板,并从类中选择您想要的许多字段,以使用这些字段生成语句。

相关问题