using System; using System.Collections.Generic; using AutoMapper; using Util.Helpers; using Util.ObjectMapping.AutoMapper.Tests.Samples; using Xunit; namespace Util.ObjectMapping.AutoMapper.Tests { /// /// 对象映射器测试 /// public class ObjectMapperExtensionsTest { /// /// 测试映射 - Sample2 -> Sample 未在配置类中配置,将自动配置映射 /// [Fact] public void TestMapTo_1() { var sample = new Sample { StringValue = "a" }; var sample2 = sample.MapTo(); Assert.Equal( "a", sample2.StringValue ); } /// /// 测试映射 - 映射相同属性名的不同对象 /// [Fact] public void TestMapTo_2() { Sample sample = new Sample { Test3 = new Sample3Copy { StringValue = "a" } }; Sample2 sample2 = sample.MapTo(); Assert.Equal( "a", sample2.Test3.StringValue ); } /// /// 测试映射 - 映射相同属性名的不同对象集合 /// [Fact] public void TestMapTo_3() { Sample sample = new Sample { TestList = new List { new() { StringValue = "a" }, new() { StringValue = "b" } } }; Sample2 sample2 = sample.MapTo(); Assert.Equal( 2, sample2.TestList.Count ); Assert.Equal( "a", sample2.TestList[0].StringValue ); Assert.Equal( "b", sample2.TestList[1].StringValue ); } /// /// 测试映射集合 /// [Fact] public void TestMapTo_4() { List sampleList = new List { new() { StringValue = "a" }, new() { StringValue = "b" } }; List sample2List = new List(); sampleList.MapTo( sample2List ); Assert.Equal( 2, sample2List.Count ); Assert.Equal( "a", sample2List[0].StringValue ); } /// /// 测试映射集合 /// [Fact] public void TestMapTo_5() { List sampleList = new List { new() { StringValue = "a" }, new() { StringValue = "b" } }; List sample2List = sampleList.MapTo>(); Assert.Equal( 2, sample2List.Count ); Assert.Equal( "a", sample2List[0].StringValue ); } /// /// 并发测试 /// [Fact] public void TestMapTo_6() { Thread.ParallelFor( () => { var sample = new Sample { StringValue = "a" }; var sample2 = sample.MapTo(); Assert.Equal( "a", sample2.StringValue ); }, 20 ); } /// /// 测试映射 - Sample -> Sample4 已在配置类中配置映射关系 /// [Fact] public void TestMapTo_7() { var sample = new Sample { StringValue = "a" }; var sample4 = sample.MapTo(); Assert.Equal( "a-1", sample4.StringValue ); } /// /// 测试映射- 已在配置类中配置映射关系 - 带参数重载 /// [Fact] public void TestMapTo_8() { var sample = new Sample { StringValue = "a" }; var sample4 = new Sample4(); sample.MapTo( sample4 ); Assert.Equal( "a-1", sample4.StringValue ); } /// /// 测试映射 - 多次执行预配置映射 /// [Fact] public void TestMapTo_9() { var sample = new Sample { StringValue = "a" }; var sample4 = sample.MapTo(); Assert.Equal( "a-1", sample4.StringValue ); sample.StringValue = "b"; sample4 = sample.MapTo(); Assert.Equal( "b-1", sample4.StringValue ); sample.StringValue = "c"; sample4 = sample.MapTo(); Assert.Equal( "c-1", sample4.StringValue ); } /// /// 测试映射 - 预配置映射与自动配置映射混合执行 /// [Fact] public void TestMapTo_10() { var sample = new Sample { StringValue = "a" }; var sample4 = sample.MapTo(); Assert.Equal( "a-1", sample4.StringValue ); sample.StringValue = "b"; var sample2 = sample.MapTo(); Assert.Equal( "b", sample2.StringValue ); sample.StringValue = "c"; sample4 = sample.MapTo(); Assert.Equal( "c-1", sample4.StringValue ); } /// /// 测试映射集合 /// [Fact] public void TestMapToList() { List sampleList = new List { new() { StringValue = "a" }, new() { StringValue = "b" } }; List sample2List = sampleList.MapToList(); Assert.Equal( 2, sample2List.Count ); Assert.Equal( "a", sample2List[0].StringValue ); } /// /// 映射集合 - 测试空集合 /// [Fact] public void TestMapToList_2() { List sampleList = new List(); List sample2List = sampleList.MapToList(); Assert.Empty( sample2List ); } /// /// 映射集合 - 测试数组 /// [Fact] public void TestMapToList_3() { Sample[] sampleList = { new() { StringValue = "a" }, new() { StringValue = "b" } }; List sample2List = sampleList.MapToList(); Assert.Equal( 2, sample2List.Count ); Assert.Equal( "a", sample2List[0].StringValue ); } /// /// 失败映射抛出异常 /// [Fact] public void TestMapTo_Throw() { //成功映射 var parentId = Guid.NewGuid().SafeString(); var dto = new TreeEntityDto() { Name = "Test1", ParentId = parentId }; var entity = dto.MapTo(); Assert.Equal( parentId, entity.ParentId.SafeString() ); //错误数据映射失败,抛出异常 var parentId2 = "/"; var dto2 = new TreeEntityDto() { Name = "Test2", ParentId = parentId2 }; Assert.Throws( () => dto2.MapTo() ); //成功映射,失败映射不影响之前的映射关系 var entity3 = dto.MapTo(); Assert.Equal( parentId, entity3.ParentId.SafeString() ); } } }