コード例 #1
0
        public async Task DefaultOptionsYieldExpectedDictionarySize()
        {
            var eventCount = 0;
            var itemCount  = 0;

            var proxy = new PerInstanceAdapter <IForTestingPurposes>
                        (
                Process.Lean(EventProcessor)
                        )
                        .Adapt(new ForTestingPurposes());


            await proxy.AsyncAction(0, "zero");

            Thread.Sleep(1000);

            Assert.Equal(1, eventCount);
            Assert.Equal(BitFunctions.CountSet((int)CaptureOptions.Default), itemCount);

            void EventProcessor(IDictionary <string, object> @event)
            {
                eventCount++;
                itemCount = @event.Count;
            }
        }
コード例 #2
0
        public void MultipleInstancesYieldsSingleActualInvocationPerDistinctInvocation()
        {
            var instance1 = new ForTestingPurposes();
            var instance2 = new ForTestingPurposes();

            var adapter = new PerInstanceAdapter <IForTestingPurposes>(For.Ever());
            var proxy1  = adapter.Adapt(instance1);
            var proxy2  = adapter.Adapt(instance2);

            proxy1.MethodCall(0, "zero");
            proxy1.MethodCall(0, "zero");
            proxy1.MethodCall(1, "zero");
            proxy1.MethodCall(1, "zero");
            proxy1.MethodCall(2, "zero");
            proxy1.MethodCall(2, "zero");

            proxy2.MethodCall(0, "zero");
            proxy2.MethodCall(0, "zero");
            proxy2.MethodCall(1, "zero");
            proxy2.MethodCall(1, "zero");
            proxy2.MethodCall(2, "zero");
            proxy2.MethodCall(2, "zero");

            Assert.Equal <uint>(3, instance1.MethodCallInvocationCount);
            Assert.Equal <uint>(0, instance2.MethodCallInvocationCount);
        }
コード例 #3
0
        public async Task SerializedResultInvokedAsyncMethodResult()
        {
            var    eventCount       = 0;
            object serializedResult = null;

            var proxy = new PerInstanceAdapter <IForTestingPurposes>
                        (
                Process.Lean(EventProcessor),
                CaptureOptions.SerializedResult
                        )
                        .Adapt(new ForTestingPurposes());

            var result = await proxy.AsyncMethodCall(1, "one");

            Thread.Sleep(1000);

            Assert.Equal(1, eventCount);
            Assert.Equal(result, JsonConvert.DeserializeObject((string)serializedResult));

            void EventProcessor(IDictionary <string, object> @event)
            {
                eventCount++;
                serializedResult = @event[nameof(CaptureOptions.SerializedResult)];
            }
        }
コード例 #4
0
        public async Task AsyncActionInvocationsAreNotCached()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance);

            await proxy.AsyncAction(0, 1, "two");

            Assert.Equal <uint>(1, instance.AsyncActionCallInvocationCount);
        }
コード例 #5
0
        public void VoidReturnTypeInvocationsAreNotCached()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance);

            proxy.Member = "Test";
            proxy.Member = "Test";
            proxy.Member = "Test";

            Assert.Equal <uint>(3, instance.MemberSetInvocationCount);
        }
コード例 #6
0
        public void MultipleDistinctCachedMemberInvocationsYieldsSingleActualInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance);

            _ = proxy.Member;
            _ = proxy.Member;
            _ = proxy.Member;

            Assert.Equal <uint>(1, instance.MemberGetInvocationCount);
        }
コード例 #7
0
        public void MultipleCachedInvocationsYieldsSingleActualInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever())
                           .Adapt(instance);

            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");

            Assert.Equal <uint>(1, instance.MethodCallInvocationCount);
        }
コード例 #8
0
        public async Task MultipleCachedAsyncInvocationsYieldsSingleInstanceInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever())
                           .Adapt(instance);

            // ReSharper disable once NotAccessedVariable
            var result = await proxy.AsyncMethodCall(0, "zero");

            Thread.Sleep(2000);

            // ReSharper disable once RedundantAssignment
            result = await proxy.AsyncMethodCall(0, "zero");

            Assert.Equal <uint>(1, instance.AsyncMethodCallInvocationCount);
        }
コード例 #9
0
        public async Task ExpiredResultYieldsMultipleActualInvocations()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Milliseconds(0))
                           .Adapt(instance);

            // ReSharper disable once NotAccessedVariable
            // ReSharper disable once RedundantAssignment
            await proxy.AsyncMethodCall(0, "zero");

            // I hate to have to do this, but otherwise the second
            // invocation may complete before the first invocation
            // is added to cache.
            Thread.Sleep(2000);

            await proxy.AsyncMethodCall(0, "zero");

            Assert.Equal <uint>(2, instance.AsyncMethodCallInvocationCount);
        }
コード例 #10
0
        public void SerializedResultMatchesInvokedMethodResult()
        {
            var    eventCount       = 0;
            object serializedResult = null;

            var proxy = new PerInstanceAdapter <IForTestingPurposes>
                        (
                Process.Lean(EventProcessor),
                CaptureOptions.SerializedResult
                        )
                        .Adapt(new ForTestingPurposes());

            var result = proxy.MethodCall(0, "zero");

            Assert.Equal(1, eventCount);
            Assert.Equal(result, JsonConvert.DeserializeObject((string)serializedResult));

            void EventProcessor(IDictionary <string, object> @event)
            {
                eventCount++;
                serializedResult = @event[nameof(CaptureOptions.SerializedResult)];
            }
        }
コード例 #11
0
        public void DeclaringTypeMatchesInvokedMethod()
        {
            var    eventCount = 0;
            object typeName   = null;

            var proxy = new PerInstanceAdapter <IForTestingPurposes>
                        (
                Process.Lean(EventProcessor),
                CaptureOptions.DeclaringTypeName
                        )
                        .Adapt(new ForTestingPurposes());

            proxy.MethodCall(0, "zero");

            Assert.Equal(1, eventCount);
            Assert.Equal(typeof(ForTestingPurposes).FullName, typeName);

            void EventProcessor(IDictionary <string, object> @event)
            {
                eventCount++;
                typeName = @event[nameof(CaptureOptions.DeclaringTypeName)];
            }
        }
コード例 #12
0
        public void SynchronousActionDoesNotAllowSerializedResultOption()
        {
            var eventCount     = 0;
            var includesResult = true;

            var proxy = new PerInstanceAdapter <IForTestingPurposes>
                        (
                Process.Lean(EventProcessor),
                CaptureOptions.SerializedResult
                        )
                        .Adapt(new ForTestingPurposes());

            proxy.SynchronousAction(0, 1, "two");

            Assert.Equal(1, eventCount);
            Assert.False(includesResult);

            void EventProcessor(IDictionary <string, object> @event)
            {
                eventCount++;
                includesResult = @event.ContainsKey(nameof(CaptureOptions.SerializedResult));
            }
        }
コード例 #13
0
        public void SerializedParametersDoesNotThrowForPropertyGetter()
        {
            var    eventCount      = 0;
            object serializedInput = null;

            var proxy = new PerInstanceAdapter <IForTestingPurposes>
                        (
                Process.Lean(EventProcessor),
                CaptureOptions.SerializedInputParameters
                        )
                        .Adapt(new ForTestingPurposes());

            var _ = proxy.Member;

            Assert.Equal(1, eventCount);
            Assert.Equal("[]", serializedInput);

            void EventProcessor(IDictionary <string, object> @event)
            {
                eventCount++;
                serializedInput = @event[nameof(CaptureOptions.SerializedInputParameters)];
            }
        }