【问题标题】:Junit of equals methodequals方法的junit
【发布时间】:2014-02-16 01:08:58
【问题描述】:

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

public boolean equals(Object o)

我确实使用了一些这样的逻辑。 (假设 number 和 name 需要相等才能获得 true)

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取决于您需要的逻辑,但测试用例创建也是如此,因此寻找一种标准方法来测试该方法,避免在测试用例中使用大量代码,如果存在明显或任何建议你可能有。

【问题讨论】:

标签: java testing junit equals equality


【解决方案1】:

查看重复问题的链接,我阅读了@user598656 的答案并建议使用 MeanBeans (Automated java bean tester)

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

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 

这是我一直在寻找的,答案是最后一个,但我认为这符合我的需求。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2014-05-27
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      相关资源
      最近更新 更多