Skip to content

Commit

Permalink
test: migrate from moq to nsubstitute
Browse files Browse the repository at this point in the history
  • Loading branch information
ricardofslp authored and joaoopereira committed Sep 9, 2023
1 parent 3d82209 commit d1490b4
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 207 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -25,38 +21,37 @@ public async Task Merge_GetNoErrors_Proceed(CoverageFormat? coverageFormat)
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object);
var processExecution = Substitute.For<IProcessExecution>();
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution);
var _dir = TestUtilities.GetTmpDirectory();
var configuration = new RerunCommandConfiguration()
{
MergeCoverageFormat = coverageFormat
};

TestUtilities.CopyFixture("DotNetCoverage", new DirectoryInfo(_dir));

processExecution.Setup(x => x.FetchOutput(It.IsAny<Process>())).Verifiable();
processExecution.Setup(x => x.FetchError(It.IsAny<Process>())).Verifiable();
processExecution.Setup(x => x.End(It.IsAny<Process>()))
.ReturnsAsync(0).Verifiable();
processExecution.Setup(x => x.Start(It.IsAny<ProcessStartInfo>()))
.ReturnsAsync(new Process()).Verifiable();

processExecution.End(Arg.Any<Process>()).Returns(0);
processExecution.Start(Arg.Any<ProcessStartInfo>()).Returns(new Process());

// Act
var act = () => dotNetCoverageRunner.Merge(configuration, _dir, DateTime.MinValue);

// Assert
await act.Should().NotThrowAsync<RerunException>();
processExecution.VerifyAll();
processExecution.Received(1).FetchOutput(Arg.Any<Process>());
processExecution.Received(1).FetchError(Arg.Any<Process>());
await processExecution.Received(1).End(Arg.Any<Process>());
await processExecution.Received(1).Start(Arg.Any<ProcessStartInfo>());
}

[Fact]
public async Task Merge_GetNoErrors_WithInvalidCoverageFormat()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object);
var processExecution = Substitute.For<IProcessExecution>();
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution);
var _dir = TestUtilities.GetTmpDirectory();
var configuration = new RerunCommandConfiguration()
{
Expand All @@ -77,8 +72,8 @@ public async Task Merge_GetErrorsWhileExecuting_Fail()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object);
var processExecution = Substitute.For<IProcessExecution>();
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution);
var _dir = TestUtilities.GetTmpDirectory();
var configuration = new RerunCommandConfiguration()
{
Expand All @@ -88,30 +83,29 @@ public async Task Merge_GetErrorsWhileExecuting_Fail()

TestUtilities.CopyFixture("DotNetCoverage", new DirectoryInfo(_dir));

processExecution.Setup(x => x.FetchOutput(It.IsAny<Process>())).Verifiable();
processExecution.Setup(x => x.FetchError(It.IsAny<Process>())).Verifiable();
processExecution.Setup(x => x.End(It.IsAny<Process>()))
.ReturnsAsync(1).Verifiable();
processExecution.Setup(x => x.Start(It.IsAny<ProcessStartInfo>()))
.ReturnsAsync(new Process()).Verifiable();
processExecution.Setup(x => x.GetError())
.Returns(errorMessage).Verifiable();
processExecution.End(Arg.Any<Process>()).Returns(1);
processExecution.Start(Arg.Any<ProcessStartInfo>())!.Returns(new Process());
processExecution.GetError().Returns(errorMessage);

// Act
var act = () => dotNetCoverageRunner.Merge(configuration, _dir, DateTime.MinValue);

// Assert
await act.Should().ThrowAsync<RerunException>().WithMessage($"*{errorMessage}");
processExecution.VerifyAll();
processExecution.Received(1).FetchOutput(Arg.Any<Process>());
processExecution.Received(1).FetchError(Arg.Any<Process>());
await processExecution.Received(1).End(Arg.Any<Process>());
await processExecution.Received(1).Start(Arg.Any<ProcessStartInfo>());
processExecution.Received(2).GetError();
}

[Fact]
public async Task Merge_GetExceptionWhileExecuting_Fail()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution.Object);
var processExecution = Substitute.For<IProcessExecution>();
var dotNetCoverageRunner = new DotNetCoverageRunner(logger, processExecution);
var _dir = TestUtilities.GetTmpDirectory();
var configuration = new RerunCommandConfiguration()
{
Expand All @@ -121,14 +115,12 @@ public async Task Merge_GetExceptionWhileExecuting_Fail()

TestUtilities.CopyFixture("DotNetCoverage", new DirectoryInfo(_dir));

processExecution.Setup(x => x.Start(It.IsAny<ProcessStartInfo>()))
.ThrowsAsync(new Exception(errorMessage)).Verifiable();
processExecution.Start(Arg.Any<ProcessStartInfo>()).Throws(new Exception(errorMessage));

// Act
var act = () => dotNetCoverageRunner.Merge(configuration, _dir, DateTime.MinValue);

// Assert
await act.Should().ThrowAsync<RerunException>().WithMessage($"*{errorMessage}");
processExecution.VerifyAll();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -21,8 +16,8 @@ public void GetErrorCode_GetDefaultValue()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object);
var processExecution = Substitute.For<IProcessExecution>();
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution);

// Act
var error = dotNetTestRunner.GetErrorCode();
Expand All @@ -36,18 +31,16 @@ public async Task Test_GetNoErrors_Proceed()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object);
processExecution.Setup(x => x.FetchOutput(It.IsAny<Process>()));
processExecution.Setup(x => x.FetchError(It.IsAny<Process>()));
processExecution.Setup(x => x.End(It.IsAny<Process>()))
.ReturnsAsync(0);
processExecution.Setup(x => x.GetOutput())
var processExecution = Substitute.For<IProcessExecution>();
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution);
processExecution.End(Arg.Any<Process>())
.Returns(0);
processExecution.GetOutput()
.Returns("No errors");
processExecution.Setup(x => x.GetError())
processExecution.GetError()
.Returns(string.Empty);
processExecution.Setup(x => x.Start(It.IsAny<ProcessStartInfo>()))
.ReturnsAsync(new Process());
processExecution.Start(Arg.Any<ProcessStartInfo>())
.Returns(new Process());

// Act
await dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory");
Expand All @@ -61,18 +54,16 @@ public async Task Test_GetErrors_UnknownError()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object);
processExecution.Setup(x => x.FetchOutput(It.IsAny<Process>()));
processExecution.Setup(x => x.FetchError(It.IsAny<Process>()));
processExecution.Setup(x => x.End(It.IsAny<Process>()))
.ReturnsAsync(1);
processExecution.Setup(x => x.GetOutput())
var processExecution = Substitute.For<IProcessExecution>();
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution);
processExecution.End(Arg.Any<Process>())
.Returns(1);
processExecution.GetOutput()
.Returns(string.Empty);
processExecution.Setup(x => x.GetError())
processExecution.GetError()
.Returns("Unexpected error");
processExecution.Setup(x => x.Start(It.IsAny<ProcessStartInfo>()))
.ReturnsAsync(new Process());
processExecution.Start(Arg.Any<ProcessStartInfo>())
.Returns(new Process());

// Act
var act = () => dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory");
Expand All @@ -87,18 +78,16 @@ public async Task Test_GetErrors_WellKnownError()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object);
processExecution.Setup(x => x.FetchOutput(It.IsAny<Process>()));
processExecution.Setup(x => x.FetchError(It.IsAny<Process>()));
processExecution.Setup(x => x.End(It.IsAny<Process>()))
.ReturnsAsync(1);
processExecution.Setup(x => x.GetOutput())
var processExecution = Substitute.For<IProcessExecution>();
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution);
processExecution.End(Arg.Any<Process>())
.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<ProcessStartInfo>()))
.ReturnsAsync(new Process());
processExecution.Start(Arg.Any<ProcessStartInfo>())
.Returns(new Process());

// Act
await dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory");
Expand All @@ -112,18 +101,16 @@ public async Task Test_GetErrors_FailedTests()
{
// Arrange
var logger = new Logger();
var processExecution = new Mock<IProcessExecution>(MockBehavior.Strict);
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution.Object);
processExecution.Setup(x => x.FetchOutput(It.IsAny<Process>()));
processExecution.Setup(x => x.FetchError(It.IsAny<Process>()));
processExecution.Setup(x => x.End(It.IsAny<Process>()))
.ReturnsAsync(1);
processExecution.Setup(x => x.GetOutput())
var processExecution = Substitute.For<IProcessExecution>();
var dotNetTestRunner = new dotnet.test.rerun.DotNetRunner.DotNetTestRunner(logger, processExecution);
processExecution.End(Arg.Any<Process>())
.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<ProcessStartInfo>()))
.ReturnsAsync(new Process());
processExecution.Start(Arg.Any<ProcessStartInfo>())
.Returns(new Process());

// Act
await dotNetTestRunner.Test(new RerunCommandConfiguration(), "resultsDirectory");
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Loading

0 comments on commit d1490b4

Please sign in to comment.