Утвердить равняется 2 спискам - PullRequest
0 голосов
/ 29 мая 2018

Пытается утвердить 2 списка, но это не удается:

enter image description here

Я пытаюсь сравнить два List объекта.

Вот мой тестовый класс.

public class RestServiceTest {

    HttpClient http = new HttpClient();
    private Gson gson = new Gson();

    @Test
    public void getAllEmployeesTest() throws IOException {
        HttpResponse response = http.get("http://localhost:8087/employee");
        List<Employee> expectedList = new ArrayList<>();
        expectedList.add(new Employee(2, "Yashwant", "Chavan", 30, false));
        Type listType = new TypeToken<ArrayList<Employee>>() {}.getType();

        List<Employee> actualList = gson.fromJson(EntityUtils.toString(response.getEntity()), listType);
        System.out.println(actualList);
        System.out.println(expectedList);
        Assert.assertEquals(actualList,expectedList);
    }
}

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Видя ваш код, вы добавляете новый Employee в свой ожидаемый список, давая этому объекту уникальную ссылку.Фактический список будет иметь другой экземпляр Employee с другой уникальной ссылкой, создающей эти два разных объекта.

Хотя два объекта имеют одинаковые поля, список assertEquals for будет использовать метод equals в Employee, чтобы проверить, совпадают ли объекты.Если вы не реализовали метод equals внутри Employee, он проверит те уникальные ссылки, о которых я упоминал ранее.

Решением было бы переопределить метод equals в Employee следующим образом:

@Override
public boolean equals(Object obj) {
   if(!obj instanceof Employee) {
      return false;
   }
   Employee e = (Employee) obj;
   // Add more fields to compare if necessary
   return this.getEmployeeId().equals(e.getEmployeeId()) && this.getAge().equals(e.getAge()); 
 }

, который должен дать вам результаты, на которые вы надеетесь. Возможна похожая проблема и, возможно, лучшее объяснение.

Как уже упоминалось @Zabuza, вам также нужно переопределить hashCode также в случае, если вы используете что-то вроде HashMap в сочетании с Employee.Дальнейшее объяснение `hashCode 'можно найти здесь .

0 голосов
/ 29 мая 2018

В случае сравнения списков я настоятельно рекомендую перейти к assertJ: http://joel -costigliola.github.io / assertj /

Используя это утверждение, будет:

Assertions.assertThat(actualList).containsAll(expectedList);
0 голосов
/ 29 мая 2018

См. Документацию Collection: Вы должны реализовать / переопределить метод равных .В противном случае при сравнении двух коллекций (например, List с Employee с) каждый элемент будет сравниваться по его идентификатору объекта.(Также не забудьте реализовать метод Employee.hashCode().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...