コード例 #1
0
        public void CreateOnMultipleThreadsConcurrentlyWorks()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingSpecimenBuilder
            {
                OnCreate = (r, ctx) => ctx.Resolve(r)
            };
            var dummyHandler = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(dummyBuilder, dummyHandler);
            var dummyContext = new DelegatingSpecimenContext()
            {
                OnResolve = (r) => 99
            };

            // Exercise system
            int[] specimens = Enumerable.Range(0, 1000)
                              .AsParallel()
                              .WithDegreeOfParallelism(8)
                              .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                              .Select(x => (int)sut.Create(typeof(int), dummyContext))
                              .ToArray();
            // Verify outcome
            Assert.Equal(1000, specimens.Length);
            Assert.True(specimens.All(s => s == 99));
            // Teardown
        }
コード例 #2
0
        public void CreateReturnsResultFromInjectedHandlerWhenRequestIsMatched()
        {
            // Fixture setup
            var builder = new DelegatingSpecimenBuilder()
            {
                OnCreate = (r, ctx) => ctx.Resolve(r)
            };

            var request     = new object();
            var expected    = new object();
            var handlerStub = new DelegatingRecursionHandler
            {
                OnHandleRecursiveRequest = (r, rs) =>
                {
                    Assert.Equal(request, r);
                    Assert.NotNull(rs);
                    return(expected);
                }
            };

            var comparer = new DelegatingEqualityComparer
            {
                OnEquals = (x, y) => true
            };

            var sut = new RecursionGuard(builder, handlerStub, comparer, 1);

            var context = new DelegatingSpecimenContext();

            context.OnResolve = r => sut.Create(r, context);
            // Exercise system
            var actual = sut.Create(request, context);

            // Verify outcome
            Assert.Equal(expected, actual);
            // Teardown
        }