У меня есть эти два теста (разобранные до костей, чтобы воспроизвести ошибку):
[TestFixture]
public class CreditorMapperTests
{
private IAbcContext _AbcContext;
[SetUp]
public void Setup()
{
_AbcContext = Substitute.For<IAbcContext>();
_AbcContext.CompanyInfo.Returns(x => new CompanyInfo(Arg.Any<Guid>()));
}
[Test]
public void A()
{
Creditor publishDocument = new Creditor();
publishDocument.CompanyExternalId = _AbcContext.CompanyInfo.UniqueId;
}
[Test]
public void B()
{
Creditor publishDocument = new Creditor();
publishDocument.CompanyExternalId = _AbcContext.CompanyInfo.UniqueId;
}
}
public interface IAbcContext
{
CompanyInfo CompanyInfo { get; }
}
public class CompanyInfo
{
public CompanyInfo(Guid uniqueId)
{
UniqueId = uniqueId;
}
public readonly Guid UniqueId;
}
Setup()
для A()
работает нормально. Однако, когда Setup()
вызывается для B()
, я получаю эту ошибку:
NSubstitute.Exceptions.UnexpectedArgumentMatcherException: аргумент
сопоставители (Arg.Is, Arg.Any) следует использовать только вместо члена
аргументы. Не используйте в операторе Returns () или где-либо еще
вне звонка участника. Правильное использование:
sub.MyMethod (Arg.Any()). Возвращает ("привет") Неправильное использование:
sub.MyMethod ("привет"). Возвращает (Arg.Any())
Это происходит только тогда, когда я запускаю оба теста, выполняя все тесты в этом классе.
Если я запустил B()
сам по себе, исключение не будет выбрано.
Почему Setup()
для B()
не работает только при автоматическом запуске после A()
?
(Примечание: оба теста идентичны).
Я использую NUnit v3.8.1 и NSubstitute v2.0.3
Это сообщение об ошибке от NSubstitute. Само сообщение объясняет, что не так с вашим кодом. NUnit ничего не может с этим поделать.
Если вы спрашиваете, почему ваш код срабатывает только во второй раз, а не в первый раз, вы спрашиваете не тех людей. Вы можете спросить разработчика NSubstitute, но, возможно, лучше потратить свое время, чтобы прекратить использование Arg.Any () не предназначенным для этого способом.
Я отправил здесь проблему:
https://github.com/nsubstitute/NSubstitute/issues/587
@ backwardsDave1 Я закрываю этот вопрос, так как это не имеет ничего общего с NUnit.
Самый полезный комментарий
Это сообщение об ошибке от NSubstitute. Само сообщение объясняет, что не так с вашим кодом. NUnit ничего не может с этим поделать.
Если вы спрашиваете, почему ваш код срабатывает только во второй раз, а не в первый раз, вы спрашиваете не тех людей. Вы можете спросить разработчика NSubstitute, но, возможно, лучше потратить свое время, чтобы прекратить использование Arg.Any () не предназначенным для этого способом.