Java中用于转换具有相同字段的两个对象的Guava函数的单元测试

Java中用于转换具有相同字段的两个对象的Guava函数的单元测试,java,unit-testing,Java,Unit Testing,我有一个非常具体的用例,每当你有两个分别来自类a和类B的对象,它们的特征是具有相同的非静态字段,并且你想在另一个字段中转换一个时,就会出现这种情况。我个人使用番石榴,如下所示: public class A{ private static serialVersionUID = .... private int field1; private String field2; } public class B{ private int field1; private Strin

我有一个非常具体的用例,每当你有两个分别来自类a和类B的对象,它们的特征是具有相同的非静态字段,并且你想在另一个字段中转换一个时,就会出现这种情况。我个人使用番石榴,如下所示:

public class A{
  private static serialVersionUID = ....

  private int field1;
  private String field2;
}

public class B{
  private int field1;
  private String field2;

  public B(final int field1, final String field2){
    this.field1 = field1;
    this.field2 = field2;
  }
}

public class AToBTransformer implements Function<A, B> {

    @Nullable
    @Override
    public B apply(final A aObj) {
      return new B(a.field1, a.field2);
    }

}
现在,在单元测试中,我可以检查AToBTransformer是否将返回一个B实例,该实例在所有公共非静态字段中的值与A实例的值相同。我的意思是,它们应该在所有未来版本的代码中提供相同的映射,因此,如果在A中添加了一个字段,那么它也应该在B中提供

是否有合理的方法在单元测试中自动检查

我正在考虑计算字段的数量,或者使用反射来计算字段,但我不确定这是否是最好的方法。

Unitils库支持基于反射的字段比较:


嗯!我不确定你使用的方式是否正确。第一个字段应该是要比较的字段名。它是正确的。你确定你在看正确的方法吗?是的,你是对的。我在上面看一行。因此,使用反射检索所有fiel而不是使用该断言进行检查应该是正确的。在这种情况下,我也可以使用Hamcrest[hasProperty],org.Hamcrest.Matcher。
ReflectionAssert.assertReflectionEquals("message", expected, actual);