Domanda

Ho postato sul forum Typemock, ma sono troppo impazienti di attendere una risposta lì. Questa è una domanda molto n00b.

Sto cercando di impostare un IContainer falso. Ecco quello che ho:

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

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

(IProgram è un'interfaccia nel mio codice).

Quando provo a eseguire questo codice, ottengo un'eccezione Autofac: "Il MyApp.IProgram servizio richiesto non è stato registrato."

Come potrebbe questa eccezione essere gettato però? Non sto in realtà chiamando container.Resolve (), giusto? Sto solo configurarlo per restituire un falso iProgram.

sfondo non collegati informazioni:. Sto sperimentando TypeMock perché Autofac utilizza metodi di estensione molto e Moq non li deridere

È stato utile?

Soluzione

Un paio di cose che possono aiutare -. In primo luogo, si può prendere in giro le chiamate Resolve() con Moq attraverso la creazione di IComponentContext.Resolve(), che tutti i metodi di estensione conferire al

In secondo luogo, Autofac è progettato in modo che non si dovrebbe avere per usare le sue interfacce dai componenti. Si veda ad esempio:

in cui è necessario l'uso (e quindi finto) IContainer o un'interfaccia simile, probabilmente si può fare la stessa cosa con il Func, IIndex e / o tipi di relazione Owned.

Spero che questo aiuti! Nick

Altri suggerimenti

Purtroppo, c'è attualmente un bug in Isolator, che impedisce fingendo contenitori autofac. Stiamo lavorando per risolverlo il più presto possibile.

Nel frattempo, c'è una ragione non si sta usando Autofac come previsto, il che significa farlo tornare un'istanza falso, come ad esempio:

[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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top