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() );
}
}
}