仅忽略 AssertJ 中的嵌入成员

ps0*_*604 4 java junit mockito assertj

我有两个类要使用JUnit/进行测试Mockito

 public class ClassA {

    private int sk;
    // getters and setters

} 


 public class ClassB {

    private int sk;
    private List<ClassA> lista;

    // getters and setters

} 
Run Code Online (Sandbox Code Playgroud)

然后在我的测试课中,使用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);
Run Code Online (Sandbox Code Playgroud)

问题是该名称sk在两个类中都存在,我只需要在 中忽略它ClassA,而不是在ClassB. 这可能吗AssertJ

Jos*_*ech 6

根据ignoringFieldsjavadoc:

嵌套字段可以这样指定: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);
Run Code Online (Sandbox Code Playgroud)