Как лучше всего протестировать фабрику / застройщика, производящего объекты сторонних производителей, у которых нет хорошего равенства? - PullRequest
0 голосов
/ 27 ноября 2018

в качестве примера;Я работаю над сборщиком для создания 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 () к сборщику).

Перед тем как идти по этому пути, я подумал, что лучше спросить, есть ли лучший подход к этой общей категориипроблемы.

1 Ответ

0 голосов
/ 27 ноября 2018

Ну, я чувствую себя глупо.

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());
}

работает так, как я хотел:)

...