Игнорирование только встроенного члена в AssertJ - PullRequest
2 голосов
/ 03 мая 2020

У меня есть два класса для тестирования с JUnit / Mockito:

 public class ClassA {

    private int sk;
    // getters and setters

} 


 public class ClassB {

    private int sk;
    private List<ClassA> lista;

    // getters and setters

} 

Затем в моем тестовом классе, используя AssertJ:

   List<ClassA> lista = //... populated with list of objects of ClassA

   ClassB expected = new ClassB();
   expected.setSk(5);
   expected.setLista(lista);

   ClassB actual = getItFromTheClassToTest();   

   assertThat(actual).usingRecursiveComparison()
                    .ignoringFields("sk")  // need to ignore only classA.sk
                    .isEqualTo(expected);

Проблема в том, что имя sk есть в обоих классах, и мне нужно игнорировать его только в ClassA, а не в ClassB. Это возможно в AssertJ?

1 Ответ

3 голосов
/ 04 мая 2020

В соответствии с ignoringFields javado c:

Вложенные поля могут быть указаны следующим образом: home.address.street.

... так что с вашим классы:

ClassB b = new ClassB(1, Arrays.asList(new ClassA(1)));
ClassB bIsEqualsExceptForNestedField = new ClassB(1, Arrays.asList(new ClassA(2)));
ClassB bIsNotEquals = new ClassB(2, Arrays.asList(new ClassA(3)));

// should succeed
assertThat(b)
    .usingRecursiveComparison()
    .ignoringFields("lista.sk")
    .isEqualTo(bIsEqualsExceptForNestedField);
// should fail
assertThat(b)
    .usingRecursiveComparison()
    .ignoringFields("lista.sk")
    .isEqualTo(bIsNotEquals);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...