Nunit: UnexpectedArgumentMatcherException при втором вызове программы установки

Созданный на 29 авг. 2019  ·  3Комментарии  ·  Источник: nunit/nunit

У меня есть эти два теста (разобранные до костей, чтобы воспроизвести ошибку):

    [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 () не предназначенным для этого способом.

Все 3 Комментарий

Это сообщение об ошибке от NSubstitute. Само сообщение объясняет, что не так с вашим кодом. NUnit ничего не может с этим поделать.

Если вы спрашиваете, почему ваш код срабатывает только во второй раз, а не в первый раз, вы спрашиваете не тех людей. Вы можете спросить разработчика NSubstitute, но, возможно, лучше потратить свое время, чтобы прекратить использование Arg.Any () не предназначенным для этого способом.

Я отправил здесь проблему:
https://github.com/nsubstitute/NSubstitute/issues/587

@ backwardsDave1 Я закрываю этот вопрос, так как это не имеет ничего общего с NUnit.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги