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); }
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)); }
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 }
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); }
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 }
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); }
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]); }
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 }
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 }