我正在用Mockito和JUnit为我的代码编写测试。到目前为止一切都很好,但知道我有StackOverFlow
错误。我想,我得到那个错误是因为我的对象是嵌套的。例如,A对象与B对象有关系,B对象也与A对象有关系。
我正在测试我的对象是否具有相同的值
assertEquals(objectA.toString(), objectB.toString());
字符串
我想从我的两个对象中删除@ToString
注解来处理StackOverFlow
错误,但我不知道如何测试两个不同的对象是否相等。我在这里看到了一些主题,他们告诉使用assertThat
,但我也没有。
我如何测试两个不同对象的值是否相同?如果你有其他的解决办法,我也想听听。
5条答案
按热度按时间zengzsys1#
重写equals方法并使用
assertEquals:
您可以重写对象中的equals方法,以比较相关字段是否相等。然后,您可以使用assertEquals
来比较整个对象。举例来说:
字符串
dy2hfwbg2#
我认为Kedar Thakkar的答案应该有效,而且应该这样做,但是如果你仍然遇到无限递归问题,那么你可以单独检查你想要比较的每个字段。你可以写一个方法,接受两个对象,如果它们的值相等,则返回,例如:
字符串
显然,您应该将在方法参数中引入的类类型从
Object
更改为您想要比较的特定类。然后你可以Assert这个方法的结果:
型
wbgh16ku3#
您可以使用
equal(Object object)
和hashCode()
来实现:字符串
hashCode()是本机方法,返回对象的整数哈希代码值。
hashCode()
的实现可以使用您希望使用的字段来完成。如果两个或多个对象的hashCodes匹配,则它们是相同的,这意味着应该获得相同的int值,以便告诉对象是相同的。vxqlmq5t4#
你需要写一个非递归的
equals
方法。假设你的类看起来像:
字符串
为了简洁起见,我只使用字段--您应该使用私有字段和getter来编写这些字段。
equals/hashcode
看起来像:型
移除递归。
B
需要同样的处理。当然,拥有这种关系意味着,如果在
B
中添加或删除字段,则需要更改A
的equals/hashcode
实现。如果你知道(因为你构造A和B示例的方式)
x.equals(y)
意味着x == y
适用于A
和B
的所有示例,那么你可以通过使用引用相等来简化你的实现。rmbxnbpk5#
首先,谢谢你们大家。我有太多的对象和属性。因此,您的建议需要对源代码进行大量更改。我不想在我测试我的服务时做这个。我在here中发现了类似的问题。我修复了
@ToString.Exclude
注解的问题。