Java中用于转换具有相同字段的两个对象的Guava函数的单元测试
我有一个非常具体的用例,每当你有两个分别来自类a和类B的对象,它们的特征是具有相同的非静态字段,并且你想在另一个字段中转换一个时,就会出现这种情况。我个人使用番石榴,如下所示: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
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);