Mi problema es que no puedo crear una instancia generada automáticamente desde la interfaz.

Este es mi ejemplo:

public class SomeClass {
    public string TestName { get; set; }
}

// And then I call like this
var obj = new Fixture().Create<SomeClass>();

La clase concreta se genera automáticamente y sus propiedades son como esta:

Console.WriteLine(obj.TestName);
// Output: TestNameb7c3f872-9286-419f-bb0a-c4b0194b6bc8

Pero tengo una interfaz como la siguiente:

public interface ISomeInterface 
{
    string TestName { get; set; }
}

// And  then I call like this
var obj = new Fixture().Create<ISomeInterface >();

Se genera pero sus propiedades no están configuradas.

Console.WriteLine(obj.TestName);
// Output: null

¿Cómo puedo crear una instancia desde la interfaz como la clase concreta?

0
hakanaltindis 23 oct. 2020 a las 15:59

1 respuesta

La mejor respuesta

De acuerdo con el comentario de Mathew Watson, es posible que esta pregunta ya esté respondida en la pregunta mencionada.

Solo quería compartir mi versión, que es ligeramente diferente de las respuestas de 2012;)

public interface ISomeInterface
{
    string TestName { get; set; }
}

public class SomeClass : ISomeInterface
{
    public string TestName { get; set; }
}

public class Test
{
    [Fact]
    public void Do()
    {
        var fixture = new Fixture();
        fixture.Customize<ISomeInterface>(x => x.FromFactory(() => new SomeClass()));
        var result = fixture.Create<ISomeInterface>();
        Console.Out.WriteLine("result = {0}", result.TestName);
        // output:
        // result = TestName2c7e6902-d959-46ce-a79f-bf933bcb5b7f
    }
}

Por supuesto, AutoMoq o AutoNSubstitute son los opciones a considerar.

1
Serhii Shushliapin 23 oct. 2020 a las 13:39