举个例子;我正在开发一个生成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());
}


以我想要的方式工作:)

10-05 20:43
查看更多