Nunit: UnexpectedArgumentMatcherException al llamar al programa de instalación por segunda vez

Creado en 29 ago. 2019  ·  3Comentarios  ·  Fuente: nunit/nunit

Tengo estas dos pruebas (reducidas al mínimo para replicar el error):

    [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;
    }

El Setup() por A() funciona bien. Sin embargo, cuando se llama a Setup() para B() , aparece este error:

NSubstitute.Exceptions.UnexpectedArgumentMatcherException: Argument
Los comparadores (Arg.Is, Arg.Any) solo deben usarse en lugar de miembro
argumentos. No lo use en una declaración Returns () ni en ningún otro lugar
fuera de la llamada de un miembro. Uso correcto:
sub.MyMethod (Arg.Any()). Devoluciones ("hola") Uso incorrecto:
sub.MyMethod ("hola"). Devuelve (Arg.Any())

Esto solo sucede cuando ejecuto ambas pruebas ejecutando todas las pruebas en esa clase.
Si ejecuto B() solo, la excepción no se lanza.

¿Por qué Setup() para B() falla solo cuando se ejecuta automáticamente después de A() ?

(nb. Ambas pruebas son idénticas).

Estoy usando NUnit v3.8.1 y NSubstitute v2.0.3

notabug

Comentario más útil

Este es un mensaje de error de NSubstitute. El mensaje en sí mismo explica qué está mal con su código. NUnit no puede hacer nada al respecto.

Si pregunta por qué su código solo se arroja la segunda vez y no la primera vez, está preguntando a las personas equivocadas. Puede preguntarle al desarrollador de NSubstitute, pero quizás un mejor uso de su tiempo es dejar de usar Arg.Any () de una manera en que no está destinado a ser usado.

Todos 3 comentarios

Este es un mensaje de error de NSubstitute. El mensaje en sí mismo explica qué está mal con su código. NUnit no puede hacer nada al respecto.

Si pregunta por qué su código solo se arroja la segunda vez y no la primera vez, está preguntando a las personas equivocadas. Puede preguntarle al desarrollador de NSubstitute, pero quizás un mejor uso de su tiempo es dejar de usar Arg.Any () de una manera en que no está destinado a ser usado.

@ backwardsDave1 Estoy cerrando este problema, ya que esto no tiene nada que ver con NUnit.

¿Fue útil esta página
0 / 5 - 0 calificaciones