相关疑难解决方法(0)

为hashcode,equals和toString方法生成单元测试

是否有任何工具/库可以自动生成我的哈希码的测试,并等于查看这些方法中涉及的实例变量的方法?

java

10
推荐指数
1
解决办法
7620
查看次数

单元测试等于和哈希码 - 一个复杂的故事

我有道德困境.我的应用程序中有一些值对象,它们是不可变的,非常简单.我用IDE生成了equals和hashcode(在我的例子中是intellij),但这样做,使代码覆盖率下降,加上报告现在表明那些值对象非常复杂(使用圈复杂度量度量)实际上他们很简单.

例如,以下等于在具有3个不可变属性的值对象中.代码复杂度为14(javaNCSS),它有26个执行分支(Cobertura).我还应该补充一点,如果任何方法的复杂度大于10,我就会失败.

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }

    TranscriptTaskDetails that = (TranscriptTaskDetails) o;

    if (inputFile != null ? !inputFile.equals(that.inputFile) : that.inputFile != null) {
        return false;
    }
    if (language != that.language) {
        return false;
    }
    if (outputFile != null ? !outputFile.equals(that.outputFile) : that.outputFile != null) {
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

我想知道其他开发人员使用什么来规避这一点,因为我非常关注复杂性报告,因为根据我的经验,高复杂度指标涉及更多错误,所以这个自动生成的equals和hashcode正在污染报告.

我正在考虑使用来自apache commons-lang的EqualsBuilder和HashcodeBuilder来规避这个问题,但我并不百分之百:S.

编辑

我应该补充一点,我为这个项目编写的代码部分是一个将被其他业务部门使用的库......并且将由不同的团队维护:S.

java complexity-theory unit-testing equals hashcode

8
推荐指数
2
解决办法
5785
查看次数

Junit等于方法

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

public boolean equals(Object o)
Run Code Online (Sandbox Code Playgroud)

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

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));
Run Code Online (Sandbox Code Playgroud)

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

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

java testing junit equality equals

7
推荐指数
1
解决办法
900
查看次数