예제 #1
0
        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();
        }
예제 #2
0
        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();
            }
        }