Я пытаюсь написать модульные тесты для обработки исключений, чтобы убедиться, что мой регистратор правильно регистрирует исключение. Я использую NSubstitute в качестве макетной среды, а Microsoft.Extensions.Logging.ILogger мне нужно выполнить для моего теста:
[Fact]
public void LogsExcpetionWhenErrorOccursInCreate()
{
var newUser = new UserDataModel
{
FirstName = "Rick",
MiddleName = "Jason",
LastName = "Grimes",
Email = "rick.grimes@thedead.com",
Created = new DateTime(2007, 8, 15)
};
var exception = new Exception("Test Exception");
// configure InsertOne to throw a generic excpetion
_mongoContext.InsertOne(newUser).Returns(x => { throw exception; });
try
{
_collection.Create(newUser);
}
catch
{
// validate that the logger logs the exception as an error
_logger.Received().LogError(exception.Message);
}
}
чтобы проверить вход в систему следующим методом:
public UserDataModel Create(UserDataModel user)
{
try
{
return MongoContext.InsertOne(user);
}
catch(Exception e)
{
_logger?.LogError(e.Message);
throw new DataAccessException("An error occurred while attempting to create a user.", e);
}
Мой тест завершился неудачей со следующей ошибкой:
Message: NSubstitute.Exceptions.ReceivedCallsException : Expected to receive a call matching:
Log(Error, 0, Test Exception, , Func)
Actually received no matching calls.
Received 1 non-matching call (non-matching arguments indicated with '*' characters):
Log(Error, 0, *Test Exception*, , Func)
Я не уверен, почему это не удается, потому что даже в этом сообщении об ошибке вызовы одинаковы.
Заранее спасибо!
Обновление:
Вот конструктор для теста, здесь я внедряю макет регистратора:
public UserCollectionTest()
{
_mongoContext = Substitute.For();
_logger = Substitute.For();
// create UserCollection with our mock client
_collection = new UserCollection(_mongoContext, _logger);
}
Подробнее здесь: https://stackoverflow.com/questions/465 ... r-net-core