如何编写单元测试来检查复制构造函数与类属性同步?

nil*_*gun 6 java junit unit-testing copy-constructor

最近,我们的系统中出现了一个错误,该错误是由于忘记在复制构造函数中分配新添加的类属性而引起的。

例如:

public class MyClass {

    private Long companyId;
    private Long classId;
    private Double value;   <=  newly added

    public MyClass(MyClass myClass) {
        this.setCompanyId(myClass.getCompanyId());
        this.setClassId(myClass.getClassId());
        this.setValue(myClass.getValue());   <= we forget this line
    }
Run Code Online (Sandbox Code Playgroud)

我想编写一个单元测试,保证在添加新属性时捕获丢失的副本分配。我应该如何进行?

Mak*_*oto 0

我会通过反思来做到这一点。

  • 新建一个MyClass. (A)
  • 通过反思,为每个字段分配一个值。这可以通过 来完成getClass().getDeclaredFields()
  • 新建一个空白实例MyClass。(二)
  • 针对 B 对 A 运行复制构造函数。
  • 通过反射判断A中的字段是否等于B。