我有两个对象A和B.对象A是我在JUnit测试期间得到的实际结果.对象B是我做一个实际的结束数据库调用并假设按预期审查.我需要声明两个对象实例A并且值B相等而不是实际对象.
我们有一个assertEquals(obj expected, obj actual)在JUnit中调用的方法,但我不希望这样.
有没有办法或解决方法来实现相同的目标?
tdd*_*key 33
想想你正在努力实现的目标.您想测试对象标识还是要验证两个对象是否具有完全相同的数据?根据你对assertEquals的建议,我猜你想要逐场进行.
如果物体很浅,你可以使用
assertThat(actual, samePropertyValuesAs(expected));
Run Code Online (Sandbox Code Playgroud)
但是,当对象是复合时,这会失败.如果你想遍历整个图形,你可以使用sameBeanAs匹配器,我们写了一些时间来解决这个问题:
assertThat(actual, sameBeanAs(expected));
Run Code Online (Sandbox Code Playgroud)
如果你正在使用AssertJ,那么你也可以使用这样的内置功能:
assertThat(actual).isEqualToComparingFieldByField(expected);
Run Code Online (Sandbox Code Playgroud)
有一件事你不想这样做会覆盖这个equals方法,因为将来可能会改变以适应业务需求.
acd*_*ior 11
如果你想要深度平等,你可以使用Commons Lang3 EqualsBuilder#reflectionEquals():
Assert.assertTrue(EqualsBuilder.reflectionEquals(expected,actual));
Run Code Online (Sandbox Code Playgroud)
aur*_*ius 10
使用assertj,您可以断言这两个对象的每个成员!
例如assertThat(actual).isEqualToComparingFieldByField(expected);
| 归档时间: |
|
| 查看次数: |
56316 次 |
| 最近记录: |