Pregunta

Me ha publicado esto en los foros typemock, pero soy demasiado impaciente para esperar una respuesta allí. Esta es una pregunta muy n00b.

Estoy tratando de establecer un IContainer falso. Aquí es lo que tengo:

var container = Isolate.Fake.Instance<IContainer>(); 
var program = Isolate.Fake.Instance<IProgram>(); 

Isolate.WhenCalled(() => container.Resolve<IProgram>()).WillReturn(program);

(IProgram es una interfaz en mi código).

Cuando trato de ejecutar este código, consigo una excepción Autofac: "El MyApp.IProgram servicio solicitado no ha sido registrada."

¿Cómo podría ser lanzado esta excepción sin embargo? No estoy realmente llamando container.Resolve (), ¿verdad? Estoy su puesta en marcha para devolver una falsa îProgramar.

Sin relación información de fondo:. Estoy probando Typemock porque Autofac utiliza ampliamente los métodos de extensión y Moq no burlarse de ellos

¿Fue útil?

Solución

Un par de cosas que pueden ayudar -. En primer lugar, se puede burlarse de llamadas Resolve() con Moq mediante la creación de IComponentContext.Resolve(), que todos los métodos de extensión delegar a

En segundo lugar, Autofac está diseñada de modo que usted no debería tener que usar sus interfaces de sus componentes. Véase, por ejemplo:

Cuando usted necesita para su uso (y por lo tanto simulacro) IContainer o una interfaz similar, es probable que pueda hacer lo mismo con el Func, IIndex y / o tipos de relaciones Owned.

Espero que esto ayude! Nick

Otros consejos

Por desgracia, no hay actualmente un error en el aislador, lo que evita la falsificación contenedores autofac. Estamos trabajando para resolverlo lo antes posible.

Por el momento, hay una razón por la que no se esté usando Autofac según lo previsto, lo que significa haber devolverlo una instancia falso, como por ejemplo:

[TestFixture]
public class TestClass
{
    private ContainerBuilder builder;
    private IContainer container;

    [SetUp]
    public void SetUp()
    {
        builder = new ContainerBuilder();
    }

    [Test, Isolated]
    public void Test1()
    {
        var fakeProgram = Isolate.Fake.Instance<IProgram>();

        builder.RegisterInstance(fakeProgram).As<IProgram>();
        container = builder.Build();

        var program = container.Resolve<IProgram>();

        Assert.AreEqual(fakeProgram, program);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top