Обновление после комментариев и обновление вопроса:
Если после внесения изменений в исходный ответ все еще возникают проблемы, это может быть еще один тест в приборе, вызывающий проблему. Я рекомендую добавить NSubstitute.Analyzers в проект, который может выявить потенциальные проблемы с использованием NSubstitute во время компиляции с использованием Roslyn. (Я рекомендую добавить это ко всем проектам, использующим NSubstitute; это действительно может помочь избежать многих потенциальных проблем!)
Если NSubstitute.Analyzers не находит ошибку, то, к сожалению, у нас осталось несколько ручных шагов, как описано в этом ответе .
Оригинальный ответ:
Соответствующие аргументы должны использоваться вместе с указанием вызова или подтверждением того, что вызов получен.
Тест, который вы опубликовали, имеет два места, которые могут вызывать эту проблему:
- Как упомянул @Fabio в комментарии, в
mockService.ServiceMethod()
используется сопоставление аргументов без соответствующего .Returns
.
- Соответствующий аргумент используется для реального вызова
anotherService.Backup()
Попробуйте изменить тест следующим образом:
[Fact]
public void Test_Method()
{
// Arrange
this.mockService.ServiceMethod(Arg.Any<Guid>()).Returns(...);
// ^- Arg matcher ^- so need Returns()
//Act
var actResult = this.anotherService.Backup(Guid.NewGuid());
// Do not use arg matchers for real calls -^
//Assert
Assert.True(actResult.Success);
}
Может быть и другая причина этой проблемы в вашем приборе, но эти два использования сопоставителей аргументов определенно не помогут!
Эти проблемы описаны в документации для сопоставления аргументов , которую вы упомянули; если документация по этим пунктам неясна, пожалуйста, поднимите вопрос с любыми предложениями по улучшению этого раздела. Очень полезно получить информацию о документации с других точек зрения, поэтому любой вклад, который вы можете внести в этом отношении, будет высоко оценен!