From fdff425bf1b1b3b39bbc552149559f83cdfb7278 Mon Sep 17 00:00:00 2001 From: Ogoun Date: Tue, 9 Apr 2019 16:37:46 +0300 Subject: [PATCH] DTO runtime build unit test --- ZeroLevel.UnitTests/ReflectionTests.cs | 39 +++++++++++++++++++ .../ZeroLevel.UnitTests.csproj | 1 + ZeroLevel/Services/Reflection/TypeHelpers.cs | 9 +++++ 3 files changed, 49 insertions(+) create mode 100644 ZeroLevel.UnitTests/ReflectionTests.cs diff --git a/ZeroLevel.UnitTests/ReflectionTests.cs b/ZeroLevel.UnitTests/ReflectionTests.cs new file mode 100644 index 0000000..8bfa194 --- /dev/null +++ b/ZeroLevel.UnitTests/ReflectionTests.cs @@ -0,0 +1,39 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using ZeroLevel.Services.ObjectMapping; +using ZeroLevel.Services.Reflection; + +namespace ZeroLevel.ReflectionUnitTests +{ + [TestClass] + public class ReflectionTests + { + [TestMethod] + public void TestDTORuntymeBuildedTypes() + { + // Arrange + var date = DateTime.Now; + var typeBuilder = new DTOTypeBuilder("MyType"); + typeBuilder.AppendField("Title"); + typeBuilder.AppendProperty("Id"); + typeBuilder.AppendProperty("Created"); + + var type = typeBuilder.Complete(); + + // Act + var mapper = TypeMapper.Create(type); + var instance = TypeHelpers.CreateNonInitializedInstance(type); + mapper.Set(instance, "Title", "This is title"); + mapper.Set(instance, "Id", 1001001); + mapper.Set(instance, "Created", date); + + // Assert + Assert.IsTrue(mapper.Exists("Title")); + Assert.IsTrue(mapper.Exists("Id")); + Assert.IsTrue(mapper.Exists("Created")); + Assert.AreEqual(mapper.Get(instance, "Id"), (long)1001001); + Assert.AreEqual(mapper.Get(instance, "Created"), date); + Assert.AreEqual(mapper.Get(instance, "Title"), "This is title"); + } + } +} diff --git a/ZeroLevel.UnitTests/ZeroLevel.UnitTests.csproj b/ZeroLevel.UnitTests/ZeroLevel.UnitTests.csproj index 8e255e4..2e80525 100644 --- a/ZeroLevel.UnitTests/ZeroLevel.UnitTests.csproj +++ b/ZeroLevel.UnitTests/ZeroLevel.UnitTests.csproj @@ -70,6 +70,7 @@ + diff --git a/ZeroLevel/Services/Reflection/TypeHelpers.cs b/ZeroLevel/Services/Reflection/TypeHelpers.cs index ee3c815..092931f 100644 --- a/ZeroLevel/Services/Reflection/TypeHelpers.cs +++ b/ZeroLevel/Services/Reflection/TypeHelpers.cs @@ -185,5 +185,14 @@ namespace ZeroLevel.Services.Reflection return Activator.CreateInstance(type); return FormatterServices.GetUninitializedObject(type); } + + public static object CreateNonInitializedInstance(Type type) + { + if (type == null) + { + throw new ArgumentNullException(nameof(type)); + } + return FormatterServices.GetUninitializedObject(type); + } } } \ No newline at end of file