Autofixture: Pregunta: configurar simulacros de dependencias anidadas con AutoMoqCustomization

Creado en 15 abr. 2016  ·  5Comentarios  ·  Fuente: AutoFixture/AutoFixture

Intenté usar AutoMoqCustomization para simular automáticamente un gráfico de objeto con dependencias anidadas y los resultados no son los que esperaba. Aquí está el código de prueba, ¿alguien puede decirme por qué después de congelar un Mock<IObject> hay una situación en la que el dispositivo crea otro IObject creado por Moq?

[TestClass]
    public class MyTestClass
    {
        [TestMethod]
        public void Test()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var objMock = fixture.Freeze<Mock<IObject>>();
            var sut = fixture.Create<Dependant2>();

            sut.Obj.Should().BeSameAs(objMock);
        }
    }

    public interface IObject { }

    public interface IDependant { IObject Obj { get; } }

    public class MyObject : IObject { }

    public class Dependant2
    {
        public Dependant2(IDependant dependant)
        {
            Obj = dependant.Obj;
        }

        public IObject Obj { get; }
    }

Comentario más útil

AutoMoqCustomization crea objetos simulados pero no los configura.

Si desea configurar los miembros del simulacro, considere usar AutoConfiguredMoqCustomization lugar. A) establecerá las propiedades configurables públicas del simulacro yb) los métodos / indexadores de configuración para devolver (y memorizar) los valores generados de manera perezosa por el dispositivo

Hay dos limitaciones. No configura:

  • métodos con ref parámetros
  • métodos genéricos

Más información al final de la hoja de referencia .

Todos 5 comentarios

AutoMoqCustomization crea objetos simulados pero no los configura.

Si desea configurar los miembros del simulacro, considere usar AutoConfiguredMoqCustomization lugar. A) establecerá las propiedades configurables públicas del simulacro yb) los métodos / indexadores de configuración para devolver (y memorizar) los valores generados de manera perezosa por el dispositivo

Hay dos limitaciones. No configura:

  • métodos con ref parámetros
  • métodos genéricos

Más información al final de la hoja de referencia .

¡Gracias por la rápida respuesta! Intenté AutoConfiguredMoqCustomization con el método en lugar de la propiedad en IDependant y respetó la instancia congelada. ¿Hay alguna manera de hacer que las propiedades no configurables también sean respetadas? Con Moq uno puede configurar un captador de propiedades incluso cuando no hay un configurador.

De hecho, no importa. También configura propiedades de solo obtención, mi mal.

También recuerdo un error en Moq que interfirió con AutoMoq, por lo que no pudo configurar propiedades de solo obtención. Al menos cuando miré esto, tenías que usar Moq versión 4.2.1409.1722 o inferior (detalles en # 434). Tal vez el error se haya solucionado en la versión más reciente de Moq, no estoy seguro.

Probé la versión de Moq más alta que es inferior a 4.2.1409.1722 y estás en lo correcto, también funciona para propiedades de solo obtención. El error de Moq no se solucionó en una versión más reciente, ya que lo probé con la última versión. Muchas gracias por su ayuda

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

Temas relacionados

josh-degraw picture josh-degraw  ·  4Comentarios

Ridermansb picture Ridermansb  ·  4Comentarios

DeafLight picture DeafLight  ·  5Comentarios

ploeh picture ploeh  ·  3Comentarios

joelleortiz picture joelleortiz  ·  4Comentarios