Autofixture: Acceso al aparato creado por el atributo AutoData.

Creado en 25 abr. 2018  ·  7Comentarios  ·  Fuente: AutoFixture/AutoFixture

Hola,
Por ahora solo puedo acceder al dispositivo de esta manera.

[Theory, AutoData]
public void Dummy(string dummy)
{
    MethodBase method = MethodBase.GetCurrentMethod();
    IFixture fixture = method.GetCustomAttribute<AutoDataAttribute>().Fixture;


    Assert.Equal(dummy, dummy);
}

Y obtengo la advertencia 'AutoDataAttribute.Fixture' es obsoleta.

¿Existe una mejor manera de acceder al dispositivo creado en el atributo AutoData? Me gustaría mezclar la creación e inyección manual y de parámetros.
Gracias

question

Comentario más útil

Sí, es realmente una mejor manera.

¿Puedes poner esto en la wiki de AutoData?
He buscado por todas partes para encontrar cómo hacer esto.
No creo que el contenedor IOC haya registrado el IFixture.

¡Muchas gracias!

Todos 7 comentarios

Hola,

Claro, simplemente solicite al dispositivo subyacente que resuelva la instancia IFixture y se devolverá automáticamente:

c# [Theory, AutoData] public void Dummy(string dummy, IFixture fixture) { }

¿Funciona para ti? :guiño:

Sí, es realmente una mejor manera.

¿Puedes poner esto en la wiki de AutoData?
He buscado por todas partes para encontrar cómo hacer esto.
No creo que el contenedor IOC haya registrado el IFixture.

¡Muchas gracias!

¿Por qué está intentando registrarse para el dispositivo con el IoC? En mi experiencia, nunca se necesita.

Principalmente para minimizar los parámetros del método de prueba para la configuración de interfaces recurrentes complejas.

[Theory, AutoMoqData]
public void Dummy(IFixture fixture, [Frozen]Mock<IComplexInterfaceWith30SubInterfaces> needed, TestClass sut)
{
    //This will add interfaces setups for needed by retrieving them from the IoC container or by property access.
    SetupInterfaces(fixture, needed);
    //We can now use needed injected in sut.
}

Tengo un ejemplo más simple

Yo prefieres esto

[Theory, AutoMoqData]
public void Dummy(IFixture fixture)
{
    Assert.Equal(String.Empty, String.Empty);
}

Más allá de esto

[Fact]
public void Dummy2()
{
    IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());

    Assert.Equal(String.Empty, String.Empty);
}

Principalmente para minimizar los parámetros del método de prueba para la configuración de interfaces recurrentes complejas.

De acuerdo, tengo un uso similar en las pruebas. La única diferencia es que prefiero prefijar esos métodos de repetición auxiliares con When() , por lo que la prueba se ve así:

c# public void Test([Frozen] IProvider provider, ISut sut, IFixture fixture) { // arrange WhenProviderReturnsOnlyInitializedEntities(provider, fixture); ..... }

Pero básicamente la idea sigue siendo la misma 😉

Cerrando este ya que no se requieren más acciones.

¿Puedes poner esto en la wiki de AutoData?

@ malylemire1 Voy a crear un sitio de documentación en el futuro. Sin embargo, siéntase libre de agregar esta muestra a nuestra wiki 😅

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