Unit testing ‐ nSubstitute examples - Habilya/LearningCourseNotes GitHub Wiki

public IDateTimeProvider DateTimeProvider { get; private set; } = Substitute.For<IDateTimeProvider>();
public IDataAccessNew DataAccess { get; private set; } = Substitute.For<IDataAccessNew>();
public IWatcherFileSystemGenericProcessesFactory GenericProcessFactory { get; private set; } = Substitute.For<IWatcherFileSystemGenericProcessesFactory>();

public ILoggerAdapter<WatcherFileSystemGenericService> Logger { get; private set; } = Substitute.For<ILoggerAdapter<WatcherFileSystemGenericService>>();
public ILoggerAdapter<GenericWatcherProcess> LoggerProcess { get; private set; } = Substitute.For<ILoggerAdapter<GenericWatcherProcess>>();
public ILoggerAdapter<ProcessConfigurationValidation> LoggerValidation { get; private set; } = Substitute.For<ILoggerAdapter<ProcessConfigurationValidation>>();
public IEmailSender EmailSender { get; private set; } = Substitute.For<IEmailSender>();



var _processConfigurationValidation = new ProcessConfigurationValidation(DateTimeProvider, LoggerValidation);
GenericProcessFactory
	.MakeProcess(ProcessCreationConstants.EDT_PERIODIC_UPDATE_CSV_PROCESS_OBJECT_CODE, Arg.Any<IServiceProvider>())
	.Returns(callInfo => new PeriodicUpdateProcessCSV(
		LoggerProcess,
		EmailSender,
		DateTimeProvider,
		DataAccess,
		ServiceConfiguration,
		_processConfigurationValidation
	));


[Fact]
public async Task LogWarningEntries_ShouldMatch()
{
	// Arrange

	// Act
	var actual = _fixture.Logger
		.ReceivedCalls()
		.Where(q => q.GetMethodInfo().Name == "LogWarning")
		.Select(q => q.GetArguments().First())
		.ToList();

	// Assert
	await Verify(actual, _verifySettings)
		.DontScrubDateTimes();
}

[Fact]
public async Task LogEntries_ShouldMatch()
{
	// Arrange

	// Act
	var actual = _fixture.LoggerProcess
		.ReceivedCalls()
		.Select(q => q.GetMethodInfo().Name == "LogError"
			? q.GetArguments()[1]
			: q.GetArguments().First())
		.ToList();

	// Assert
	await Verify(actual, _verifySettings)
		.DontScrubDateTimes();
}