Exemplo n.º 1
0
        public void ShouldReturnValueFromCacheIfPresent()
        {
            // Arrange
            AutoFixtureValuesHandler sut = CreateSutWithMockedDependencies();

            var target = Substitute.For <IInterfaceWithParameterlessMethod>();
            var call   = CallHelper.CreateCallMock(() => target.Method());

            var callSpec = Substitute.For <ICallSpecification>();

            sut.CallSpecificationFactory.CreateFrom(call, MatchArgs.AsSpecifiedInCall).Returns(callSpec);

            var cachedResult = "cachedResult";

            CallResultData ignored;

            sut.ResultCache.TryGetResult(call, out ignored)
            .Returns(c =>
            {
                c[1] = new CallResultData(Maybe.Just <object>(cachedResult),
                                          Enumerable.Empty <CallResultData.ArgumentValue>());
                return(true);
            });

            // Act
            var actualResult = sut.Handle(call);

            // Assert
            sut.ResultResolver.DidNotReceive().ResolveResult(Arg.Any <ICall>());
            Assert.True(actualResult.HasReturnValue);
            Assert.Equal(cachedResult, actualResult.ReturnValue);
        }
        public void TheLatestResultShouldBeReturned()
        {
            // Arrange
            var sut          = new CallResultCache();
            var cachedResult = new CallResultData(Maybe.Nothing <object>(), null);
            var call         = Substitute.For <ICall>();

            var callSpec1 = Substitute.For <ICallSpecification>();

            callSpec1.IsSatisfiedBy(call).Returns(true);

            var callSpec2 = Substitute.For <ICallSpecification>();

            callSpec2.IsSatisfiedBy(call).Returns(true);

            // Act
            sut.AddResult(callSpec1, new CallResultData(Maybe.Nothing <object>(), null));
            sut.AddResult(callSpec2, cachedResult);

            CallResultData retrievedResult;
            var            hasResult = sut.TryGetResult(call, out retrievedResult);

            // Assert
            Assert.True(hasResult);
            Assert.Same(cachedResult, retrievedResult);
        }
Exemplo n.º 3
0
        public void TheLatestResultShouldBeReturned()
        {
            // Fixture setup
            var sut          = new CallResultCache();
            var cachedResult = new CallResultData(Maybe.Nothing <object>(), null);
            var call         = Substitute.For <ICall>();

            var callSpec1 = Substitute.For <ICallSpecification>();

            callSpec1.IsSatisfiedBy(call).Returns(true);

            var callSpec2 = Substitute.For <ICallSpecification>();

            callSpec2.IsSatisfiedBy(call).Returns(true);

            // Exercise system
            sut.AddResult(callSpec1, new CallResultData(Maybe.Nothing <object>(), null));
            sut.AddResult(callSpec2, cachedResult);

            CallResultData retrievedResult;
            var            hasResult = sut.TryGetResult(call, out retrievedResult);

            // Verify outcome
            Assert.True(hasResult);
            Assert.Same(cachedResult, retrievedResult);

            // Teardown
        }
        public void AddRowShouldFailForNullCallSpecification()
        {
            // Arrange
            var sut        = new CallResultCache();
            var callResult = new CallResultData(Maybe.Nothing <object>(),
                                                Enumerable.Empty <CallResultData.ArgumentValue>());

            // Act & Assert
            Assert.Throws <ArgumentNullException>(() => sut.AddResult(null, callResult));
        }
Exemplo n.º 5
0
        public void AddRowShouldFailForNullCallSpecification()
        {
            // Fixture setup
            var sut        = new CallResultCache();
            var callResult = new CallResultData(Maybe.Nothing <object>(),
                                                Enumerable.Empty <CallResultData.ArgumentValue>());

            // Exercise system & Verify outcome
            Assert.Throws <ArgumentNullException>(() => sut.AddResult(null, callResult));

            // Teardown
        }
Exemplo n.º 6
0
        public void ConstructorShouldSetCorrectProperties()
        {
            // Arrange
            var retValue       = Maybe.Just(new object());
            var argumentValues = new CallResultData.ArgumentValue[1];

            // Act
            var sut = new CallResultData(retValue, argumentValues);

            // Assert
            Assert.Equal(retValue, sut.ReturnValue);
            Assert.Same(argumentValues, sut.ArgumentValues);
        }
Exemplo n.º 7
0
        public void ConstructorShouldSetCorrectProperties()
        {
            // Fixture setup
            var retValue       = Maybe.Just(new object());
            var argumentValues = new CallResultData.ArgumentValue[1];

            // Exercise system
            var sut = new CallResultData(retValue, argumentValues);

            // Verify outcome
            Assert.Equal(retValue, sut.ReturnValue);
            Assert.Same(argumentValues, sut.ArgumentValues);

            // Teardown
        }
Exemplo n.º 8
0
        public void ShouldCacheResolvedValue()
        {
            // Arrange
            AutoFixtureValuesHandler sut = CreateSutWithMockedDependencies();

            var target = Substitute.For <IInterfaceWithParameterlessMethod>();
            var call   = CallHelper.CreateCallMock(() => target.Method());

            var callResult =
                new CallResultData(Maybe.Nothing <object>(), Enumerable.Empty <CallResultData.ArgumentValue>());

            sut.ResultResolver.ResolveResult(call).Returns(callResult);

            // Act
            sut.Handle(call);

            // Assert
            sut.ResultCache.Received().AddResult(Arg.Any <ICallSpecification>(), callResult);
        }
Exemplo n.º 9
0
        public void ShouldSetOutArgumentValue()
        {
            // Arrange
            var sut = CreateSutWithMockedDependencies();

            var target = Substitute.For <IInterfaceWithOutVoidMethod>();
            int ignored;
            var call = CallHelper.CreateCallMock(() => target.Method(out ignored));

            var callResult = new CallResultData(
                Maybe.Nothing <object>(),
                new[] { new CallResultData.ArgumentValue(0, 42) });

            sut.ResultResolver.ResolveResult(call).Returns(callResult);

            // Act
            sut.Handle(call);

            // Assert
            Assert.Equal(42, call.GetArguments()[0]);
        }
Exemplo n.º 10
0
        public void ShouldCorrectlyHandleConcurrency()
        {
            // Fixture setup
            int threadsCount   = 5;
            int itemsPerThread = 10;


            var dataRows = Enumerable.Range(0, threadsCount * itemsPerThread)
                           .Select(_ =>
            {
                var call     = Substitute.For <ICall>();
                var callSpec = Substitute.For <ICallSpecification>();
                callSpec.IsSatisfiedBy(call).Returns(true);
                var result = new CallResultData(Maybe.Nothing <object>(),
                                                Enumerable.Empty <CallResultData.ArgumentValue>());

                return(call: call, callSpec: callSpec, result: result);
            })
                           .ToList();

            var sut = new CallResultCache();

            // Exercise system
            dataRows
            .AsParallel()
            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
            .WithDegreeOfParallelism(threadsCount)
            .Select(data =>
            {
                sut.AddResult(data.callSpec, data.result);
                return(true);
            })
            .ToArray();

            // Verify outcome
            Assert.True(dataRows.All(row =>
                                     sut.TryGetResult(row.call, out CallResultData result) && ReferenceEquals(result, row.result)));

            // Teardown
        }
        public void ShouldntReturnIfSpecificationIsNotSatisfied()
        {
            // Arrange
            var sut = new CallResultCache();

            var call     = Substitute.For <ICall>();
            var callSpec = Substitute.For <ICallSpecification>();

            callSpec.IsSatisfiedBy(call).Returns(false);

            var cachedResult = new CallResultData(Maybe.Nothing <object>(), null);

            // Act
            sut.AddResult(callSpec, cachedResult);

            CallResultData retrievedResult;
            var            hasResult = sut.TryGetResult(call, out retrievedResult);

            // Assert
            Assert.False(hasResult);
            Assert.Null(retrievedResult);
        }
        public void ShouldSetOutArgumentValue()
        {
            // Fixture setup
            var sut = CreateSutWithMockedDependencies();

            var target = Substitute.For <IInterfaceWithOutVoidMethod>();
            int _;
            var call = CallHelper.CreateCallMock(() => target.Method(out _));

            var callResult = new CallResultData(
                Maybe.Nothing <object>(),
                new[] { new CallResultData.ArgumentValue(0, 42) });

            sut.ResultResolver.ResolveResult(call).Returns(callResult);

            // Exercise system
            sut.Handle(call);

            // Verify outcome
            Assert.Equal(42, call.GetArguments()[0]);

            // Teardown
        }
Exemplo n.º 13
0
        public void ShouldntReturnIfSpecificationIsNotSatisfied()
        {
            // Fixture setup
            var sut = new CallResultCache();

            var call     = Substitute.For <ICall>();
            var callSpec = Substitute.For <ICallSpecification>();

            callSpec.IsSatisfiedBy(call).Returns(false);

            var cachedResult = new CallResultData(Maybe.Nothing <object>(), null);

            // Exercise system
            sut.AddResult(callSpec, cachedResult);

            CallResultData retrievedResult;
            var            hasResult = sut.TryGetResult(call, out retrievedResult);

            // Verify outcome
            Assert.False(hasResult);
            Assert.Null(retrievedResult);

            // Teardown
        }