忽略只有嵌套成员的AssertJ。

huangapple go评论99阅读模式
英文:

Ignoring only embedded member in AssertJ

问题

  1. 我有两个类需要用`JUnit`/`Mockito`进行测试
  2. public class ClassA {
  3. private int sk;
  4. // getters and setters
  5. }
  6. public class ClassB {
  7. private int sk;
  8. private List<ClassA> lista;
  9. // getters and setters
  10. }
  11. 然后在我的测试类中使用`AssertJ`
  12. List<ClassA> lista = //... 用ClassA对象的列表填充
  13. ClassB expected = new ClassB();
  14. expected.setSk(5);
  15. expected.setLista(lista);
  16. ClassB actual = getItFromTheClassToTest();
  17. assertThat(actual).usingRecursiveComparison()
  18. .ignoringFields("sk") // 需要仅在ClassA中忽略sk字段
  19. .isEqualTo(expected);
  20. 问题是`sk`字段在两个类中都存在我需要仅在`ClassA`中忽略它而不是在`ClassB`中忽略这在`AssertJ`中是否可行
英文:

I have two classes to test with JUnit/Mockito:

  1. public class ClassA {
  2. private int sk;
  3. // getters and setters
  4. }
  5. public class ClassB {
  6. private int sk;
  7. private List&lt;ClassA&gt; lista;
  8. // getters and setters
  9. }

Then in my test class, using AssertJ:

  1. List&lt;ClassA&gt; lista = //... populated with list of objects of ClassA
  2. ClassB expected = new ClassB();
  3. expected.setSk(5);
  4. expected.setLista(lista);
  5. ClassB actual = getItFromTheClassToTest();
  6. assertThat(actual).usingRecursiveComparison()
  7. .ignoringFields(&quot;sk&quot;) // need to ignore only classA.sk
  8. .isEqualTo(expected);

The problem is that the name sk is in both classes, and I need to ignore it only in ClassA, not in ClassB. Is this possible in AssertJ?

答案1

得分: 6

根据ignoringFields的Javadoc:

> 嵌套字段可以像这样指定:home.address.street

...所以使用您的类:

  1. ClassB b = new ClassB(1, Arrays.asList(new ClassA(1)));
  2. ClassB bIsEqualsExceptForNestedField = new ClassB(1, Arrays.asList(new ClassA(2)));
  3. ClassB bIsNotEquals = new ClassB(2, Arrays.asList(new ClassA(3)));
  4. // 应该成功
  5. assertThat(b)
  6. .usingRecursiveComparison()
  7. .ignoringFields("lista.sk")
  8. .isEqualTo(bIsEqualsExceptForNestedField);
  9. // 应该失败
  10. assertThat(b)
  11. .usingRecursiveComparison()
  12. .ignoringFields("lista.sk")
  13. .isEqualTo(bIsNotEquals);
英文:

According to the ignoringFields javadoc:

> Nested fields can be specified like this: home.address.street.

...so with your classes:

  1. ClassB b = new ClassB(1, Arrays.asList(new ClassA(1)));
  2. ClassB bIsEqualsExceptForNestedField = new ClassB(1, Arrays.asList(new ClassA(2)));
  3. ClassB bIsNotEquals = new ClassB(2, Arrays.asList(new ClassA(3)));
  4. // should succeed
  5. assertThat(b)
  6. .usingRecursiveComparison()
  7. .ignoringFields(&quot;lista.sk&quot;)
  8. .isEqualTo(bIsEqualsExceptForNestedField);
  9. // should fail
  10. assertThat(b)
  11. .usingRecursiveComparison()
  12. .ignoringFields(&quot;lista.sk&quot;)
  13. .isEqualTo(bIsNotEquals);

huangapple
  • 本文由 发表于 2020年5月4日 03:31:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/61580478.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定