Java 仅忽略AssertJ中的嵌入成员
我有两个类要用Java 仅忽略AssertJ中的嵌入成员,java,junit,mockito,assertj,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 } 问题是名称sk在这两个类中,我只需要在ClassA中忽略它,而不
JUnit
/Mockito
进行测试:
public class ClassA {
private int sk;
// getters and setters
}
public class ClassB {
private int sk;
private List<ClassA> lista;
// getters and setters
}
问题是名称
sk
在这两个类中,我只需要在ClassA
中忽略它,而不需要在ClassB
中忽略它。这在AssertJ
中可能吗?根据ignoringFields
javadoc:
可以这样指定嵌套字段:home.address.street
…因此,对于您的课程:
ClassB=newclassb(1,Arrays.asList(newclassa(1));
ClassB bIsEqualsExceptForNestedField=新的ClassB(1,Arrays.asList(新的ClassA(2));
ClassB bIsNotEquals=newclassb(2,Arrays.asList)(newclassa(3));
//应该成功
断言(b)
.使用递归比较()
.ignoringFields(“lista.sk”)
.isEqualTo(Nestedfield除外);
//应该失败
断言(b)
.使用递归比较()
.ignoringFields(“lista.sk”)
.isEqualTo(比斯诺特奎尔斯);
我不确定是否可以将断言分为两个步骤,一个用于ClassB.sk
,另一个用于ClassB.lista
(忽略sk
)。查一下..你可以用though@Nikos我无法从您的链接判断如何比较(或忽略)特定类中的字段。您可以为RecursiveAssertion字段创建自定义比较器。在这个比较器中,您将检查classB的sk键,但忽略lista中ClassA的sk键。例如,我同意Nikos的观点,为ClassA注册一个忽略sk字段的比较器。我读过关于嵌套字段的内容,但lista是一个列表,而不是一个单一的结构化字段,因此我不确定这是否可行,它需要一个类似.ignoringFields的键(“lista.*.sk”)
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);