@Test
  public void testCopy_ok() {
    SrcMappingObject srcRef = new SrcMappingObject();
    srcRef.setIntegerValue(1);
    srcRef.setIntValue(1);
    srcRef.setName("ljh");
    srcRef.setStart(true);

    // NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
    // nestedSrcRef.setBigDecimalValue(BigDecimal.ONE);
    // srcRef.setMapping(nestedSrcRef);

    TargetMappingObject targetRef = new TargetMappingObject(); // 测试一下mapping到一个Object对象
    srcCopyer.copy(srcRef, targetRef);
    assertEquals(targetRef.getIntegerValue(), srcRef.getIntegerValue());
    assertEquals(targetRef.getIntValue(), srcRef.getIntValue());
    assertNull(targetRef.getTargetName()); // 为null,因为属性不匹配
    assertEquals(targetRef.isStart(), srcRef.isStart());

    SrcMappingObject newSrcRef = new SrcMappingObject(); // 反过来再mapping一次
    targetCopyer.copy(targetRef, newSrcRef);
    assertEquals(newSrcRef.getIntegerValue(), targetRef.getIntegerValue());
    assertEquals(newSrcRef.getIntValue(), targetRef.getIntValue());
    assertNull(newSrcRef.getName()); // 为null,因为属性不匹配
    assertEquals(newSrcRef.isStart(), targetRef.isStart());
  }
  @Test
  public void testNestedMapping() { // 测试嵌套mapping处理
    BeanMappingBuilder builder =
        new BeanMappingBuilder() {

          protected void configure() {
            behavior().debug(true); // 设置行为
            mapping(HashMap.class, HashMap.class);
            fields(srcField(ONE, String.class), targetField(ONE_OTHER, BigInteger.class));
            fields(srcField(TWO, BigInteger.class), targetField(TWO_OTHER, Integer.class));
            fields(
                    srcField(THREE, SrcMappingObject.class),
                    targetField(THREE_OTHER, TargetMappingObject.class))
                .recursiveMapping(true);
          }
        };
    // 第二层mapping
    BeanMappingBuilder nestedMapping =
        new BeanMappingBuilder() {

          protected void configure() {
            behavior().debug(true); // 设置行为
            mapping(SrcMappingObject.class, TargetMappingObject.class);
            fields(srcField("intValue"), targetField("intValue"));
            fields(srcField("integerValue"), targetField("integerValue"));
            fields(srcField("start"), targetField("start"));
            fields(srcField("name"), targetField("targetName"));
            fields(srcField("mapping"), targetField("mapping")).recursiveMapping(true);
          }
        };
    // 第三层mapping
    BeanMappingBuilder nextNestedMapping =
        new BeanMappingBuilder() {

          protected void configure() {
            behavior().debug(true); // 设置行为
            mapping(NestedSrcMappingObject.class, NestedTargetMappingObject.class);
            fields(srcField("name"), targetField("name"));
            fields(srcField("bigDecimalValue"), targetField("value"));
          }
        };

    BeanMappingConfigHelper.getInstance().register(nestedMapping);
    BeanMappingConfigHelper.getInstance().register(nextNestedMapping);

    BeanMapping mapping = new BeanMapping(builder);
    Map src = new HashMap();
    src.put(ONE, "10");
    src.put(TWO, BigInteger.TEN);
    SrcMappingObject srcRef = new SrcMappingObject();
    srcRef.setIntegerValue(1);
    srcRef.setIntValue(1);
    srcRef.setName("ljh");
    srcRef.setStart(true);

    NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
    nestedSrcRef.setBigDecimalValue(BigDecimal.ONE);
    nestedSrcRef.setName("ljh");
    srcRef.setMapping(nestedSrcRef);
    src.put(THREE, srcRef);

    Map dest = new HashMap();
    mapping.mapping(src, dest);
    assertEquals(dest.get(ONE_OTHER), BigInteger.valueOf(10));
    assertEquals(dest.get(TWO_OTHER), Integer.valueOf(10));

    TargetMappingObject targetRef = (TargetMappingObject) dest.get(THREE_OTHER);
    assertNotNull(targetRef.getMapping());
    assertEquals(targetRef.getIntValue(), srcRef.getIntValue());
    assertEquals(targetRef.getIntegerValue(), srcRef.getIntegerValue());
    assertEquals(targetRef.getTargetName(), srcRef.getName());
    assertEquals(targetRef.getMapping().getName(), srcRef.getMapping().getName());
    assertEquals(
        targetRef.getMapping().getValue(), srcRef.getMapping().getBigDecimalValue().toString());
  }