Mercurial > pub > bltoolkit
diff UnitTests/CS/Data/ExecuteObjectTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UnitTests/CS/Data/ExecuteObjectTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,109 @@ +using System; +using NUnit.Framework; +using BLToolkit.Reflection; +using BLToolkit.Mapping; +using BLToolkit.Data; +using System.Collections.Generic; + +namespace UnitTests.CS.Data +{ + [TestFixture] + public class ExecuteObjectTest + { + const string _query = @" SELECT 1 AS PersonId, '1' AS FirstName, '1' AS MiddleName, '1' AS LastName + UNION SELECT 2 AS PersonId, '2' AS FirstName, '2' AS MiddleName, '2' AS LastName + UNION SELECT 3 AS PersonId, '3' AS FirstName, '3' AS MiddleName, '3' AS LastName + UNION SELECT 4 AS PersonId, '4' AS FirstName, '0' AS MiddleName, '4' AS LastName + UNION SELECT 5 AS PersonId, '5' AS FirstName, '1' AS MiddleName, '5' AS LastName + UNION SELECT 6 AS PersonId, '6' AS FirstName, '2' AS MiddleName, '6' AS LastName + UNION SELECT 7 AS PersonId, '7' AS FirstName, '3' AS MiddleName, '7' AS LastName + UNION SELECT 8 AS PersonId, '8' AS FirstName, '0' AS MiddleName, '8' AS LastName"; + + [ObjectFactory(typeof(Person.Factory))] + public class Person + { + public class Factory : IObjectFactory + { + public static Type GetType(int id) + { + int r = id % 4; + + switch (r) + { + case 0: + return typeof(Person); + case 1: + return typeof(Person1); + case 2: + return typeof(Person2); + default: + return typeof(Person3); + } + } + + #region IObjectFactory Members + + public object CreateInstance(TypeAccessor typeAccessor, InitContext context) + { + int id = context.DataSource.GetInt32(context.SourceObject, + context.DataSource.GetOrdinal("PersonId")); + + context.ObjectMapper = context.MappingSchema.GetObjectMapper(Factory.GetType(id)); + + return context.ObjectMapper.TypeAccessor.CreateInstance(context); + } + + #endregion + } + + public int PersonId; + public string FirstName; + } + + public class Person1 : Person + { + public string MiddleName; + } + + public class Person2 : Person + { + public string LastName; + } + + public class Person3 : Person + { + public string MiddleName; + public string LastName; + } + + [Test] + public void PerfomanceTest() + { + using (DbManager db = new DbManager()) + { + + List<Person> list = db.SetCommand(_query) + .ExecuteList<Person>(); + + foreach (Person a in list) + { + Assert.AreEqual(Person.Factory.GetType(a.PersonId), a.GetType()); + + Assert.AreEqual(a.PersonId.ToString(), a.FirstName); + + if (a is Person2) + Assert.AreEqual(a.PersonId.ToString(), (a as Person2).LastName); + + if (a is Person1) + Assert.AreEqual((a.PersonId % 4).ToString(), (a as Person1).MiddleName); + + if (a is Person3) + { + Assert.AreEqual(a.PersonId.ToString(), (a as Person3).LastName); + Assert.AreEqual((a.PersonId % 4).ToString(), (a as Person3).MiddleName); + } + } + } + } + } +}