diff --git a/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetCoverageRunnerTests.cs b/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetCoverageRunnerTests.cs index f285a62..eb99749 100644 --- a/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetCoverageRunnerTests.cs +++ b/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetCoverageRunnerTests.cs @@ -1,16 +1,12 @@ -using System.CommandLine; -using System.CommandLine.Invocation; -using System.CommandLine.Parsing; -using System.Diagnostics; -using System.IO.Abstractions; +using System.Diagnostics; using dotnet_test_rerun.IntegrationTests.Utilities; -using dotnet.test.rerun.Analyzers; using dotnet.test.rerun.DotNetRunner; using dotnet.test.rerun.Enums; using dotnet.test.rerun.Logging; using dotnet.test.rerun.RerunCommand; using FluentAssertions; -using Moq; +using NSubstitute; +using NSubstitute.ExceptionExtensions; using Xunit; namespace dotnet_test_rerun.UnitTest.DotNetTestRunner; @@ -25,8 +21,8 @@ public async Task Merge_GetNoErrors_Proceed(CoverageFormat? coverageFormat) { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object); + var processExecution = Substitute.For(); + var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution); var _dir = TestUtilities.GetTmpDirectory(); var configuration = new RerunCommandConfiguration() { @@ -34,20 +30,19 @@ public async Task Merge_GetNoErrors_Proceed(CoverageFormat? coverageFormat) }; TestUtilities.CopyFixture("DotNetCoverage", new DirectoryInfo(_dir)); - - processExecution.Setup(x => x.FetchOutput(It.IsAny())).Verifiable(); - processExecution.Setup(x => x.FetchError(It.IsAny())).Verifiable(); - processExecution.Setup(x => x.End(It.IsAny())) - .ReturnsAsync(0).Verifiable(); - processExecution.Setup(x => x.Start(It.IsAny())) - .ReturnsAsync(new Process()).Verifiable(); + + processExecution.End(Arg.Any()).Returns(0); + processExecution.Start(Arg.Any()).Returns(new Process()); // Act var act = () => dotNetCoverageRunner.Merge(configuration, _dir, DateTime.MinValue); // Assert await act.Should().NotThrowAsync(); - processExecution.VerifyAll(); + processExecution.Received(1).FetchOutput(Arg.Any()); + processExecution.Received(1).FetchError(Arg.Any()); + await processExecution.Received(1).End(Arg.Any()); + await processExecution.Received(1).Start(Arg.Any()); } [Fact] @@ -55,8 +50,8 @@ public async Task Merge_GetNoErrors_WithInvalidCoverageFormat() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object); + var processExecution = Substitute.For(); + var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution); var _dir = TestUtilities.GetTmpDirectory(); var configuration = new RerunCommandConfiguration() { @@ -77,8 +72,8 @@ public async Task Merge_GetErrorsWhileExecuting_Fail() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object); + var processExecution = Substitute.For(); + var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution); var _dir = TestUtilities.GetTmpDirectory(); var configuration = new RerunCommandConfiguration() { @@ -88,21 +83,20 @@ public async Task Merge_GetErrorsWhileExecuting_Fail() TestUtilities.CopyFixture("DotNetCoverage", new DirectoryInfo(_dir)); - processExecution.Setup(x => x.FetchOutput(It.IsAny())).Verifiable(); - processExecution.Setup(x => x.FetchError(It.IsAny())).Verifiable(); - processExecution.Setup(x => x.End(It.IsAny())) - .ReturnsAsync(1).Verifiable(); - processExecution.Setup(x => x.Start(It.IsAny())) - .ReturnsAsync(new Process()).Verifiable(); - processExecution.Setup(x => x.GetError()) - .Returns(errorMessage).Verifiable(); + processExecution.End(Arg.Any()).Returns(1); + processExecution.Start(Arg.Any())!.Returns(new Process()); + processExecution.GetError().Returns(errorMessage); // Act var act = () => dotNetCoverageRunner.Merge(configuration, _dir, DateTime.MinValue); // Assert await act.Should().ThrowAsync().WithMessage($"*{errorMessage}"); - processExecution.VerifyAll(); + processExecution.Received(1).FetchOutput(Arg.Any()); + processExecution.Received(1).FetchError(Arg.Any()); + await processExecution.Received(1).End(Arg.Any()); + await processExecution.Received(1).Start(Arg.Any()); + processExecution.Received(2).GetError(); } [Fact] @@ -110,8 +104,8 @@ public async Task Merge_GetExceptionWhileExecuting_Fail() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object); + var processExecution = Substitute.For(); + var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution); var _dir = TestUtilities.GetTmpDirectory(); var configuration = new RerunCommandConfiguration() { @@ -121,14 +115,12 @@ public async Task Merge_GetExceptionWhileExecuting_Fail() TestUtilities.CopyFixture("DotNetCoverage", new DirectoryInfo(_dir)); - processExecution.Setup(x => x.Start(It.IsAny())) - .ThrowsAsync(new Exception(errorMessage)).Verifiable(); + processExecution.Start(Arg.Any()).Throws(new Exception(errorMessage)); // Act var act = () => dotNetCoverageRunner.Merge(configuration, _dir, DateTime.MinValue); // Assert await act.Should().ThrowAsync().WithMessage($"*{errorMessage}"); - processExecution.VerifyAll(); } } \ No newline at end of file diff --git a/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetTestRunnerTests.cs b/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetTestRunnerTests.cs index 58b2b5a..ee216dd 100644 --- a/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetTestRunnerTests.cs +++ b/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/DotNetTestRunnerTests.cs @@ -1,15 +1,10 @@ -using System.CommandLine; -using System.CommandLine.Invocation; -using System.CommandLine.Parsing; -using System.Diagnostics; -using System.IO.Abstractions; -using dotnet.test.rerun.Analyzers; +using System.Diagnostics; using dotnet.test.rerun.DotNetRunner; using dotnet.test.rerun.Enums; using dotnet.test.rerun.Logging; using dotnet.test.rerun.RerunCommand; using FluentAssertions; -using Moq; +using NSubstitute; using Xunit; namespace dotnet_test_rerun.UnitTest.DotNetTestRunner; @@ -21,8 +16,8 @@ public void GetErrorCode_GetDefaultValue() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object); + var processExecution = Substitute.For(); + var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution); // Act var error = dotNetTestRunner.GetErrorCode(); @@ -36,18 +31,16 @@ public async Task Test_GetNoErrors_Proceed() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object); - processExecution.Setup(x => x.FetchOutput(It.IsAny())); - processExecution.Setup(x => x.FetchError(It.IsAny())); - processExecution.Setup(x => x.End(It.IsAny())) - .ReturnsAsync(0); - processExecution.Setup(x => x.GetOutput()) + var processExecution = Substitute.For(); + var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution); + processExecution.End(Arg.Any()) + .Returns(0); + processExecution.GetOutput() .Returns("No errors"); - processExecution.Setup(x => x.GetError()) + processExecution.GetError() .Returns(string.Empty); - processExecution.Setup(x => x.Start(It.IsAny())) - .ReturnsAsync(new Process()); + processExecution.Start(Arg.Any()) + .Returns(new Process()); // Act await dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory"); @@ -61,18 +54,16 @@ public async Task Test_GetErrors_UnknownError() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object); - processExecution.Setup(x => x.FetchOutput(It.IsAny())); - processExecution.Setup(x => x.FetchError(It.IsAny())); - processExecution.Setup(x => x.End(It.IsAny())) - .ReturnsAsync(1); - processExecution.Setup(x => x.GetOutput()) + var processExecution = Substitute.For(); + var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution); + processExecution.End(Arg.Any()) + .Returns(1); + processExecution.GetOutput() .Returns(string.Empty); - processExecution.Setup(x => x.GetError()) + processExecution.GetError() .Returns("Unexpected error"); - processExecution.Setup(x => x.Start(It.IsAny())) - .ReturnsAsync(new Process()); + processExecution.Start(Arg.Any()) + .Returns(new Process()); // Act var act = () => dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory"); @@ -87,18 +78,16 @@ public async Task Test_GetErrors_WellKnownError() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object); - processExecution.Setup(x => x.FetchOutput(It.IsAny())); - processExecution.Setup(x => x.FetchError(It.IsAny())); - processExecution.Setup(x => x.End(It.IsAny())) - .ReturnsAsync(1); - processExecution.Setup(x => x.GetOutput()) + var processExecution = Substitute.For(); + var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution); + processExecution.End(Arg.Any()) + .Returns(1); + processExecution.GetOutput() .Returns(String.Empty); - processExecution.Setup(x => x.GetError()) + processExecution.GetError() .Returns("No test source files were specified."); - processExecution.Setup(x => x.Start(It.IsAny())) - .ReturnsAsync(new Process()); + processExecution.Start(Arg.Any()) + .Returns(new Process()); // Act await dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory"); @@ -112,18 +101,16 @@ public async Task Test_GetErrors_FailedTests() { // Arrange var logger = new Logger(); - var processExecution = new Mock(MockBehavior.Strict); - var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object); - processExecution.Setup(x => x.FetchOutput(It.IsAny())); - processExecution.Setup(x => x.FetchError(It.IsAny())); - processExecution.Setup(x => x.End(It.IsAny())) - .ReturnsAsync(1); - processExecution.Setup(x => x.GetOutput()) + var processExecution = Substitute.For(); + var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution); + processExecution.End(Arg.Any()) + .Returns(1); + processExecution.GetOutput() .Returns("FirstLine\nFailed! - Failed:\nThirdLine"); - processExecution.Setup(x => x.GetError()) + processExecution.GetError() .Returns(string.Empty); - processExecution.Setup(x => x.Start(It.IsAny())) - .ReturnsAsync(new Process()); + processExecution.Start(Arg.Any()) + .Returns(new Process()); // Act await dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory"); diff --git a/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/ProcessExecutionTests.cs b/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/ProcessExecutionTests.cs index d1250ce..35fa72c 100644 --- a/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/ProcessExecutionTests.cs +++ b/test/dotnet-test-rerun.UnitTests/DotNetTestRunner/ProcessExecutionTests.cs @@ -1,15 +1,6 @@ -using System.CommandLine; -using System.CommandLine.Invocation; -using System.CommandLine.Parsing; -using System.Diagnostics; -using System.IO.Abstractions; -using dotnet.test.rerun.Analyzers; -using dotnet.test.rerun.DotNetRunner; -using dotnet.test.rerun.Enums; +using dotnet.test.rerun.DotNetRunner; using dotnet.test.rerun.Logging; -using dotnet.test.rerun.RerunCommand; using FluentAssertions; -using Moq; using Xunit; namespace dotnet_test_rerun.UnitTest.DotNetTestRunner; diff --git a/test/dotnet-test-rerun.UnitTests/RerunCommand/RerunCommandTests.cs b/test/dotnet-test-rerun.UnitTests/RerunCommand/RerunCommandTests.cs index c669ca9..3d72bf1 100644 --- a/test/dotnet-test-rerun.UnitTests/RerunCommand/RerunCommandTests.cs +++ b/test/dotnet-test-rerun.UnitTests/RerunCommand/RerunCommandTests.cs @@ -8,7 +8,7 @@ using dotnet.test.rerun.Logging; using dotnet.test.rerun.RerunCommand; using FluentAssertions; -using Moq; +using NSubstitute; using Xunit; namespace dotnet_test_rerun.UnitTest.RerunCommand; @@ -22,22 +22,22 @@ public async Task Run_TestsOnce_NoFailures() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); - dotNetTestRunner.Setup(x => x.Test(config, directoryInfo.FullName)) + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); // Act await command.Run(); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Once); + await dotNetTestRunner.Received(1).Test(config, directoryInfo.FullName); } @@ -49,15 +49,15 @@ public async Task InvokeCommand_TestsOnce_NoFailures() var config = new RerunCommandConfiguration(); var cmd = new Command("test-rerun"); config.Set(cmd); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New("results-directory"); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); - dotNetTestRunner.Setup(x => x.Test(config, directoryInfo.FullName)) + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); // Act @@ -65,7 +65,7 @@ await command.InvokeAsync("path --filter filter --settings settings --logger log "--results-directory results-directory --rerunMaxAttempts 2 --loglevel Debug"); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Once); + await dotNetTestRunner.Received(1).Test(config, directoryInfo.FullName); } [Fact] @@ -75,27 +75,28 @@ public async Task Run_TestsFail_NoTrxFound() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); - dotNetTestRunner.Setup(x => x.Test(config, directoryInfo.FullName)) + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); - dotNetTestRunner.Setup(x => x.GetErrorCode()) + dotNetTestRunner.GetErrorCode() .Returns(ErrorCode.FailedTests); - testResultsAnalyzer.SetupSequence(x => x.GetTrxFiles(It.IsAny(), It.IsAny())) + testResultsAnalyzer.GetTrxFiles(Arg.Any(), Arg.Any()) .Returns(Array.Empty()); // Act await command.Run(); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Once); - testResultsAnalyzer.Verify(x => x.GetTrxFiles(It.IsAny(), It.IsAny()), Times.Once); + await dotNetTestRunner.Received(1).Test(config, directoryInfo.FullName); + dotNetTestRunner.Received(2).GetErrorCode(); + testResultsAnalyzer.Received(1).GetTrxFiles(Arg.Any(), Arg.Any()); } [Fact] @@ -105,30 +106,32 @@ public async Task Run_TestsFail_NoTestsFoundInTrxToRerun() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); var trxFile = fileSystem.FileInfo.New("Second.trx"); - dotNetTestRunner.Setup(x => x.Test(config, directoryInfo.FullName)) + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); - dotNetTestRunner.Setup(x => x.GetErrorCode()) + dotNetTestRunner.GetErrorCode() .Returns(ErrorCode.FailedTests); - testResultsAnalyzer.SetupSequence(x => x.GetTrxFiles(It.IsAny(), It.IsAny())) + testResultsAnalyzer.GetTrxFiles(Arg.Any(), Arg.Any()) .Returns(new[] { trxFile }); - testResultsAnalyzer.Setup(x => x.GetFailedTestsFilter(It.Is(files => files[0] == trxFile))) + testResultsAnalyzer.GetFailedTestsFilter(Arg.Is(files => files[0] == trxFile)) .Returns(String.Empty); // Act await command.Run(); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Once); - testResultsAnalyzer.Verify(x => x.GetTrxFiles(It.IsAny(), It.IsAny()), Times.Once); + await dotNetTestRunner.Received(1).Test(config, directoryInfo.FullName); + dotNetTestRunner.Received(2).GetErrorCode(); + testResultsAnalyzer.Received(1).GetTrxFiles(Arg.Any(), Arg.Any()); + testResultsAnalyzer.Received(1).GetFailedTestsFilter(Arg.Is(files => files[0] == trxFile)); } [Fact] @@ -138,37 +141,36 @@ public async Task Run_TestsFailOnFirstRun_PassOnSecond() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); var firstTrxFile = fileSystem.FileInfo.New("First.trx"); var secondTrxFile = fileSystem.FileInfo.New("Second.trx"); - dotNetTestRunner.SetupSequence(x => x.Test(config, directoryInfo.FullName)) - .Returns(Task.CompletedTask) + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); - dotNetTestRunner.SetupSequence(x => x.GetErrorCode()) - .Returns(ErrorCode.FailedTests) - .Returns(ErrorCode.Success); - testResultsAnalyzer.SetupSequence(x => x.GetTrxFiles(It.IsAny(), It.IsAny())) - .Returns(new[] { firstTrxFile }) - .Returns(new[] { secondTrxFile }); - testResultsAnalyzer.Setup(x => x.GetFailedTestsFilter(It.Is(files => files[0] == firstTrxFile))) + dotNetTestRunner.GetErrorCode() + .Returns(ErrorCode.FailedTests, ErrorCode.Success); + testResultsAnalyzer.GetTrxFiles(Arg.Any(), Arg.Any()) + .Returns(new[] { firstTrxFile }, new[] { secondTrxFile }); + testResultsAnalyzer.GetFailedTestsFilter(Arg.Is(files => files[0] == firstTrxFile)) .Returns("filterToRerun"); - testResultsAnalyzer.Setup(x => x.GetFailedTestsFilter(It.Is(files => files[0] == secondTrxFile))) + testResultsAnalyzer.GetFailedTestsFilter(Arg.Is(files => files[0] == secondTrxFile)) .Returns(string.Empty); // Act await command.Run(); - // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetTrxFiles(It.IsAny(), It.IsAny()), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetFailedTestsFilter(new[] { secondTrxFile}), Times.Exactly(1)); + // Assert + await dotNetTestRunner.Received(2).Test(config, directoryInfo.FullName); + dotNetTestRunner.Received(2).GetErrorCode(); + testResultsAnalyzer.Received(2).GetTrxFiles(Arg.Any(), Arg.Any()); + testResultsAnalyzer.Received(1).GetFailedTestsFilter(Arg.Is(files => files[0] == firstTrxFile)); + testResultsAnalyzer.Received(1).GetFailedTestsFilter(Arg.Is(files => files[0] == secondTrxFile)); } [Fact] @@ -178,35 +180,33 @@ public async Task Run_TestsFailOnFirstRunWithMultipleTrxFiles_PassOnSecond() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); var firstTrxFile = fileSystem.FileInfo.New("First.trx"); var secondTrxFile = fileSystem.FileInfo.New("Second.trx"); - dotNetTestRunner.SetupSequence(x => x.Test(config, directoryInfo.FullName)) - .Returns(Task.CompletedTask) + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); - dotNetTestRunner.SetupSequence(x => x.GetErrorCode()) - .Returns(ErrorCode.FailedTests) - .Returns(ErrorCode.Success); - testResultsAnalyzer.SetupSequence(x => x.GetTrxFiles(It.IsAny(), It.IsAny())) - .Returns(new[] { firstTrxFile, secondTrxFile }) - .Returns(Array.Empty() ); - testResultsAnalyzer.Setup(x => x.GetFailedTestsFilter(It.Is(files => files[0] == firstTrxFile && files[1] == secondTrxFile))) + dotNetTestRunner.GetErrorCode() + .Returns(ErrorCode.FailedTests, ErrorCode.Success); + testResultsAnalyzer.GetTrxFiles(Arg.Any(), Arg.Any()) + .Returns(new[] { firstTrxFile, secondTrxFile }, Array.Empty()); + testResultsAnalyzer.GetFailedTestsFilter(Arg.Is(files => files[0] == firstTrxFile && files[1] == secondTrxFile)) .Returns("filterToRerun"); // Act await command.Run(); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetTrxFiles(It.IsAny(), It.IsAny()), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetFailedTestsFilter(new[] { firstTrxFile, secondTrxFile}), Times.Once); + await dotNetTestRunner.Received(2).Test(config, directoryInfo.FullName); + dotNetTestRunner.Received(2).GetErrorCode(); + testResultsAnalyzer.Received(2).GetTrxFiles(Arg.Any(), Arg.Any()); + testResultsAnalyzer.Received(1).GetFailedTestsFilter(Arg.Is(files => files[0] == firstTrxFile && files[1] == secondTrxFile)); } [Fact] @@ -216,39 +216,39 @@ public async Task Run_TestsFailOnFirstRun_PassOnSecond_WithDeleteReports() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config, "--deleteReports"); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); var firstTrxFile = fileSystem.FileInfo.New("First.trx"); var secondTrxFile = fileSystem.FileInfo.New("Second.trx"); - - dotNetTestRunner.SetupSequence(x => x.Test(config, directoryInfo.FullName)) - .Returns(Task.CompletedTask) + + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); - dotNetTestRunner.SetupSequence(x => x.GetErrorCode()) - .Returns(ErrorCode.FailedTests) - .Returns(ErrorCode.Success); - testResultsAnalyzer.SetupSequence(x => x.GetTrxFiles(It.IsAny(), It.IsAny())) - .Returns(new []{ firstTrxFile }) - .Returns(new [] { secondTrxFile }); - testResultsAnalyzer.Setup(x => x.GetFailedTestsFilter(It.Is(files => files[0] == firstTrxFile))) + dotNetTestRunner.GetErrorCode() + .Returns(ErrorCode.FailedTests, ErrorCode.Success); + testResultsAnalyzer.GetTrxFiles(Arg.Any(), Arg.Any()) + .Returns(new []{ firstTrxFile },new [] { secondTrxFile }); + testResultsAnalyzer.GetFailedTestsFilter(Arg.Is(files => files[0] == firstTrxFile)) .Returns("filterToRerun"); - testResultsAnalyzer.Setup(x => x.GetFailedTestsFilter(It.Is(files => files[0] == secondTrxFile))) + testResultsAnalyzer.GetFailedTestsFilter(Arg.Is(files => files[0] == secondTrxFile)) .Returns(string.Empty); - testResultsAnalyzer.Setup(x => x.GetReportFiles()) + testResultsAnalyzer.GetReportFiles() .Returns(new HashSet() {firstTrxFile.FullName, secondTrxFile.FullName}); // Act await command.Run(); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetTrxFiles(It.IsAny(), It.IsAny()), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetFailedTestsFilter(new[] { secondTrxFile}), Times.Exactly(1)); + await dotNetTestRunner.Received(2).Test(config, directoryInfo.FullName); + dotNetTestRunner.Received(2).GetErrorCode(); + testResultsAnalyzer.Received(2).GetTrxFiles(Arg.Any(), Arg.Any()); + testResultsAnalyzer.Received(1).GetFailedTestsFilter(Arg.Is(files => files[0] == firstTrxFile)); + testResultsAnalyzer.Received(1).GetFailedTestsFilter(Arg.Is(files => files[0] == secondTrxFile)); + testResultsAnalyzer.Received().GetReportFiles(); firstTrxFile.Exists.Should().BeFalse(); secondTrxFile.Exists.Should().BeFalse(); } @@ -260,38 +260,33 @@ public async Task Run_TestsFailOnAllTries_Failure() var logger = new Logger(); var config = new RerunCommandConfiguration(); InitialConfigurationSetup(config); - var dotNetTestRunner = new Mock(); - var dotNetCoverageRunner = new Mock(); + var dotNetTestRunner = Substitute.For(); + var dotNetCoverageRunner = Substitute.For(); var fileSystem = new FileSystem(); - var testResultsAnalyzer = new Mock(); + var testResultsAnalyzer = Substitute.For(); var directoryInfo = fileSystem.DirectoryInfo.New(config.ResultsDirectory); - var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner.Object, - dotNetCoverageRunner.Object, fileSystem, testResultsAnalyzer.Object); + var command = new dotnet.test.rerun.RerunCommand.RerunCommand(logger, config, dotNetTestRunner, + dotNetCoverageRunner, fileSystem, testResultsAnalyzer); var firstTrxFile = fileSystem.FileInfo.New("First.trx"); var secondTrxFile = fileSystem.FileInfo.New("Second.trx"); - - dotNetTestRunner.SetupSequence(x => x.Test(config, directoryInfo.FullName)) - .Returns(Task.CompletedTask) - .Returns(Task.CompletedTask) + + dotNetTestRunner.Test(config, directoryInfo.FullName) .Returns(Task.CompletedTask); - dotNetTestRunner.SetupSequence(x => x.GetErrorCode()) - .Returns(ErrorCode.FailedTests) - .Returns(ErrorCode.FailedTests) + dotNetTestRunner.GetErrorCode() .Returns(ErrorCode.FailedTests); - testResultsAnalyzer.SetupSequence(x => x.GetTrxFiles(It.IsAny(), It.IsAny())) - .Returns(new [] {firstTrxFile}) - .Returns(new [] {secondTrxFile}); - testResultsAnalyzer.SetupSequence(x => x.GetFailedTestsFilter(It.IsAny())) - .Returns("filterToRerun") + testResultsAnalyzer.GetTrxFiles(Arg.Any(), Arg.Any()) + .Returns(new [] {firstTrxFile},new [] {secondTrxFile}); + testResultsAnalyzer.GetFailedTestsFilter(Arg.Any()) .Returns("filterToRerun"); // Act await command.Run(); // Assert - dotNetTestRunner.Verify(x => x.Test(config, directoryInfo.FullName), Times.Exactly(3)); - testResultsAnalyzer.Verify(x => x.GetTrxFiles(It.IsAny(), It.IsAny()), Times.Exactly(2)); - testResultsAnalyzer.Verify(x => x.GetFailedTestsFilter(It.IsAny()), Times.Exactly(2)); + await dotNetTestRunner.Received(3).Test(config, directoryInfo.FullName); + dotNetTestRunner.Received(2).GetErrorCode(); + testResultsAnalyzer.Received(2).GetTrxFiles(Arg.Any(), Arg.Any()); + testResultsAnalyzer.Received(2).GetFailedTestsFilter(Arg.Any()); } private void InitialConfigurationSetup(RerunCommandConfiguration configuration, string extraParams = "") diff --git a/test/dotnet-test-rerun.UnitTests/dotnet-test-rerun.UnitTests.csproj b/test/dotnet-test-rerun.UnitTests/dotnet-test-rerun.UnitTests.csproj index 7b72d3f..fe9461d 100644 --- a/test/dotnet-test-rerun.UnitTests/dotnet-test-rerun.UnitTests.csproj +++ b/test/dotnet-test-rerun.UnitTests/dotnet-test-rerun.UnitTests.csproj @@ -16,7 +16,7 @@ - +