public void InjectTo_Success() { var cls1 = DeclareClass(); var type1 = cls1.GetBuiltType(); dynamic dto = Activator.CreateInstance(type1); var tmp = new Source { Id = 10, Name = "test", EntityToDto = "2020", X = 95, Sample = new NestedSouce { Id = 50, X = 86, Description = "Hello" }, Alternation = new Source2 { Id = 46, Content = "Xin chao", PublishedDate = new DateTime(2030, 12, 22) }, Array = new Element[] { new Element { Token = 1, Des = "1" }, new Element { Token = 2, Des = "2" } }, List = new List <Element> { new Element { Token = 3, Des = "3" }, new Element { Token = 4, Des = "4" } } }; tmp.Middle = new Middle(); tmp.Middle.Nested = new NestedSource { Id = 11, Name = "test2", X = 99, Sample = new NestedSouce { Id = 50, X = 86, Description = "Hello" }, Alternation = new Source2 { Id = 46, Content = "Xin chao", PublishedDate = new DateTime(2030, 12, 22) }, Array = new Element[] { new Element { Token = 1, Des = "1" }, new Element { Token = 2, Des = "2" } }, List = new List <Element> { new Element { Token = 3, Des = "3" }, new Element { Token = 4, Des = "4" } } }; var date = new DateTime(2020, 12, 22); var entity2 = new Source { Id = 10, Name = "test", X = 95, Sample = null, Alternation = new Source2 { PublishedDate = date }, Array = null, List = null }; Mapper.MapFromEntityToDto(dto, tmp); dto.EntityToDto = "2020"; // End preparing data; var entity = new Source(); Mapper.MapFromDtoToEntity(dto, entity); // Test Mode OneWayToDto Assert.Null(entity.EntityToDto); Assert.True(entity.Id == dto.Id); Assert.True(entity.Name == dto.Name); Assert.True(entity.X == dto.Fields.X); Assert.True(entity.Sample.Id == dto.Sample.R.Id); Assert.True(entity.Sample.X == dto.Fields.Y); Assert.True(entity.Alternation.Content == dto.Alternation.Content); Assert.True(entity.Alternation.Id == dto.Alternation.Id); Assert.True(entity.Array[0].Token == dto.Array[0].Token); Assert.True(entity.Array[0].Des == dto.Array[0].Des); Assert.True(entity.Array[1].Token == dto.Array[1].Token); Assert.True(entity.Array[1].Des == dto.Array[1].Des); var index = 0; foreach (var item in dto.List) { Assert.True(entity.List[index].Token == item.Token); Assert.True(entity.List[index].Des == item.Des); ++index; } // nested prop Assert.True(entity.Middle.Nested.Id == dto.Middle.Nested.Id); Assert.True(entity.Middle.Nested.Name == dto.Middle.Nested.Name); Assert.True(entity.Middle.Nested.X == dto.Middle.Nested.Fields.X); Assert.True(entity.Middle.Nested.Sample.Id == dto.Middle.Nested.Sample.R.Id); Assert.True(entity.Middle.Nested.Sample.X == dto.Middle.Nested.Fields.Y); Assert.True(entity.Middle.Nested.Alternation.Content == dto.Middle.Nested.Alternation.Content); Assert.True(entity.Middle.Nested.Alternation.Id == dto.Middle.Nested.Alternation.Id); Assert.True(entity.Middle.Nested.Alternation.PublishedDate == dto.Middle.Nested.PublishedDate); Assert.True(entity.Middle.Nested.Array[0].Token == dto.Middle.Nested.Array[0].Token); Assert.True(entity.Middle.Nested.Array[0].Des == dto.Middle.Nested.Array[0].Des); Assert.True(entity.Middle.Nested.Array[1].Token == dto.Middle.Nested.Array[1].Token); Assert.True(entity.Middle.Nested.Array[1].Des == dto.Middle.Nested.Array[1].Des); index = 0; foreach (var item in dto.Middle.Nested.List) { Assert.True(entity.Middle.Nested.List[index].Token == item.Token); Assert.True(entity.Middle.Nested.List[index].Des == item.Des); ++index; } Assert.True(entity.Middle.Nested.Array[0].Token == dto.Middle2.Array[0].Token); Assert.True(entity.Middle.Nested.Array[0].Des == dto.Middle2.Array[0].Des); Assert.True(entity.Middle.Nested.Array[1].Token == dto.Middle2.Array[1].Token); Assert.True(entity.Middle.Nested.Array[1].Des == dto.Middle2.Array[1].Des); index = 0; foreach (var item in dto.Middle3.List) { Assert.True(entity.Middle.Nested.List[index].Token == item.Token); Assert.True(entity.Middle.Nested.List[index].Des == item.Des); ++index; } var keys = DtoObject.GetIds(dto); Assert.True(entity.Name == keys[0]); Assert.True(entity.Id == keys[1]); Mapper.MapFromDtoToEntity(dto, entity2); Assert.NotNull(entity2.Sample); Assert.NotNull(entity2.Sample); Assert.NotNull(entity2.Alternation); Assert.True(entity2.Alternation.PublishedDate == date); Assert.NotNull(entity2.List); Assert.NotNull(entity2.Array); var dtoObj = dto as IDtoObject; Assert.NotNull(dtoObj); var exp = cls1.BuildSelectorExpression(); Assert.NotNull(exp); }