举个例子;我正在开发一个生成Apache HttpUriRequests的生成器。
我的测试如下:
@Test
public void testRequestGet() {
HttpUriRequest request = RequestBuilder.request("http://www.google.com").get();
assertEquals(new HttpGet("http://www.google.com"), request);
}
这失败了,显然是因为HttpGet没有定义#equals,因此默认为Object#equals。
我可以手动测试产生的HttpGet的所有组件的相等性,以验证它们是否符合我的期望-这现在很容易,但是一旦标头,参数等开始涉及,它可能会变得很丑陋(加上测试HttpEntity会带来的额外噪音)我将#post()添加到生成器后,请摆姿势)。
在走这条路线之前,我想问一下是否有更好的方法来解决这一大类问题。
最佳答案
好吧,我觉得很傻。
EqualsBuiilder可以选择进行递归测试。
@Test
public void testGetRequest() {
HttpGet request = RequestBuilder.request("http://www.google.com").get();
HttpGet expected = new HttpGet("http://www.google.com");
assertEquals(true, new EqualsBuilder().setTestRecursive(true).reflectionAppend(expected, request).isEquals());
}
以我想要的方式工作:)