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); }
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); }
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); }
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); }
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); }
public void MixedInvocationsYieldsMultipleInvocations() { var instance = new ForTestingPurposes(); var proxy = new PerMethodAdapter <IForTestingPurposes>() .Cache(x => x.MethodCall(0, "zero"), For.Ever()) .Adapt(instance); proxy.MethodCall(0, "zero"); proxy.MethodCall(0, "zero"); proxy.MethodCall(1, "one"); proxy.MethodCall(2, "two"); Assert.Equal <uint>(3, instance.MethodCallInvocationCount); }
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); }
public void MultipleCacheExpectationsYieldExpectedResult() { var instance = new ForTestingPurposes(); var proxy = new PerMethodAdapter <IForTestingPurposes>() .Cache(x => x.MethodCall(It.IsAny <int>(), "zero"), For.Ever()) .Adapt(instance); proxy.MethodCall(0, "zero"); var result0 = proxy.MethodCall(0, "zero"); proxy.MethodCall(1, "zero"); var result1 = proxy.MethodCall(1, "zero"); Assert.Equal <uint>(2, instance.MethodCallInvocationCount); Assert.Equal("0zero", result0); Assert.Equal("1zero", result1); }
public void MultipleMemberInvocationsYieldsSingleInvocation() { var instance = new ForTestingPurposes(); var proxy = new PerMethodAdapter <IForTestingPurposes>() .Cache(x => x.Member, For.Ever()) .Adapt(instance); proxy.Member = "test"; // ReSharper disable once RedundantAssignment var result = proxy.Member; instance.Member = "not equal to test"; result = proxy.Member; Assert.Equal <uint>(1, instance.MemberGetInvocationCount); Assert.Equal("test", result); }
public void ClassProxyTargetOnlyVirtualMethodsAreCached() { var instance = new ForTestingPurposes(); var proxy = new PerMethodAdapter <ForTestingPurposes>() .Cache(x => x.MethodCall(It.IsAny <int>(), "zero"), For.Ever()) .Cache(x => x.VirtualMethodCall(It.IsAny <int>(), "zero"), For.Ever()) .Adapt(instance); proxy.MethodCall(0, "zero"); proxy.MethodCall(0, "zero"); proxy.VirtualMethodCall(0, "zero"); proxy.VirtualMethodCall(0, "zero"); Assert.Equal <uint>(2, proxy.MethodCallInvocationCount); Assert.Equal <uint>(1, instance.VirtualMethodCallInvocationCount); Assert.Equal <uint>(0, instance.MethodCallInvocationCount); }
public async Task MultipleCachedAsyncInvocationsYieldsSingleInstanceInvocation() { var instance = new ForTestingPurposes(); var proxy = new PerMethodAdapter <IForTestingPurposes>() .Cache(x => x.AsyncMethodCall(It.IsAny <int>(), "zero"), For.Ever()) .Adapt(instance); // ReSharper disable once NotAccessedVariable // ReSharper disable once RedundantAssignment var result = 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); result = await proxy.AsyncMethodCall(0, "zero"); Assert.Equal <uint>(1, instance.AsyncMethodCallInvocationCount); Assert.Equal("0zero", result); }