Hamcrest matcher для сравнения двух массивов - PullRequest
0 голосов
/ 30 января 2019

У меня есть метод, который сортирует массив, и я хочу проверить его, я хочу сравнить его результат с ожидаемым, конечно, что я могу сделать это с помощью цикла for, но я спрашиваю, есть лиявляется сопоставителем Hamcrest для сравнения

У меня есть класс

class Person{
 String name;
 int age;
 double budget;
 Person(String name,int age,double budget){
  this.name = name;
  this.age = age;
  this.budget = budget;
 }
 @Override
 public boolean equals(Object obj) {
   if (obj == null || !(obj instanceof Person)) return false;
   Person p = (Person) obj;
   if (((Person) obj).budget == budget && ((Person) obj).age == age && ((Person) obj).name.equals(name)) {
    return true;
   }
   return false;
 }
}

, и мой метод тестирования такой:

@Test
public void InsertionSortOfObjectUsingComparator() {
    Person p1 = new Person("A", 18, 800);
    Person p2 = new Person("K", 15, 1800);
    Person p3 = new Person("L", 18, 600);
    Person[] persons = {p1,p2,p3};
    Person[] expected = {p3, p1, p2};
    Person[] result = (new Sort()).sort(persons, Comparator.<Person>comparingDouble(o-> o.budget);
    //want to compare the content of the two arrays result and expected; using assertThat
}

Возможно ли это сделать с помощью Hamcrest?если да, то как?

ОБНОВЛЕНИЕ

да, это возможно, используя IsArrayContainingInOrder.arrayContaining

    ....
    assertThat(expected, IsArrayContainingInOrder.arrayContaining((new InsertionSort().sort(persons, Comparator.comparingDouble(o -> o.budget)))));
    assertThat(3,is((new InsertionSort().sort(persons, Comparator.comparingDouble(o -> o.budget))).length));
}

1 Ответ

0 голосов
/ 30 января 2019

Есть много способов сделать это с hamcrest.Самый простой способ - использовать средство сопоставления arrayContaining в классе Matchers.

assertThat(result, Matchers.arrayContaining(expected));
...