public void CreateDelegate_FlatPocoFactoryForComplexRow_DelegateSetsPocoAsExpected() { var expected = Generate.CreateFakeComplexRow(); var entityDefinition = new DataAnnotationsDefinitionProvider().Resolve <ComplexFlatRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); Stopwatch stopwatch; ComplexFlatRow actual; using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch = Stopwatch.StartNew(); var pocoDelegate = FlatPocoFactory.CreateDelegate <ComplexFlatRow>(pocoDataRequest).MappingDelegate as Func <IDataReader, ComplexFlatRow>; Trace.TraceInformation($"{stopwatch.Elapsed} Create delegate"); stopwatch.Reset(); Assert.IsNotNull(pocoDelegate); stopwatch.Start(); actual = pocoDelegate.Invoke(reader); Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #1"); stopwatch.Reset(); } Assert.IsNotNull(actual); Assert.AreEqual(expected.FakeComplexEntityId, actual.FakeComplexEntityId); Assert.AreEqual(expected, actual, string.Join(Environment.NewLine, expected.GetDifferences(actual))); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDelegate = FlatPocoFactory.CreateDelegate <ComplexFlatRow>(new PocoDataRequest(reader, entityDefinition, databaseContext.Object)).MappingDelegate as Func <IDataReader, ComplexFlatRow>; Assert.IsNotNull(pocoDelegate); stopwatch.Start(); pocoDelegate.Invoke(reader); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #2"); stopwatch.Reset(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDelegate = FlatPocoFactory.CreateDelegate <ComplexFlatRow>(new PocoDataRequest(reader, entityDefinition, databaseContext.Object)).MappingDelegate as Func <IDataReader, ComplexFlatRow>; Assert.IsNotNull(pocoDelegate); stopwatch.Start(); pocoDelegate.Invoke(reader); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #3"); stopwatch.Reset(); }
public void CreateDelegate_RaisedPocoFactoryForRaisedComplexRow_DelegateSetsPocoAsExpected() { var definitionProvider = new DataAnnotationsDefinitionProvider(); var entityDefinition = definitionProvider.Resolve <ComplexRaisedRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); using (var target = new RaisedPocoFactory(definitionProvider)) { var expected = Generate.CreateFakeRaisedComplexRow(true); Stopwatch stopwatch = new Stopwatch(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Start(); var actual = target.CreatePoco <ComplexRaisedRow>(pocoDataRequest); Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #1"); stopwatch.Reset(); Assert.IsNotNull(actual); Assert.AreEqual(expected.ComplexEntityId, actual.ComplexEntityId); Assert.AreEqual( expected.SubEntity, actual.SubEntity, string.Join(Environment.NewLine, expected.SubEntity.GetDifferences(actual.SubEntity))); Assert.AreEqual( expected.DependentEntity, actual.DependentEntity, string.Join(Environment.NewLine, expected.DependentEntity.GetDifferences(actual.DependentEntity))); Assert.AreEqual(expected, actual, string.Join(Environment.NewLine, expected.GetDifferences(actual))); } stopwatch.Start(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Start(); target.CreatePoco <ComplexRaisedRow>(pocoDataRequest); Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #2"); } stopwatch.Reset(); stopwatch.Start(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Start(); target.CreatePoco <ComplexRaisedRow>(pocoDataRequest); Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #3"); } stopwatch.Reset(); } }