La mise en place sur le comportement d'une méthode semble appeler la méthode

StackOverflow https://stackoverflow.com/questions/3517869

  •  29-09-2019
  •  | 
  •  

Question

a publié ce billet sur les forums Typemock, mais je suis trop impatient d'attendre une réponse là-bas. Ceci est une question très n00b.

Je suis en train de mettre en place un IContainer de faux. Voici ce que j'ai:

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

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

(IProgram est une interface dans mon code).

Lorsque je tente d'exécuter ce code, je reçois une exception Autofac: « Le MyApp.IProgram de service demandé n'a pas été enregistré. »

Comment cette exception pourrait être jeté si? Je ne demande pas en fait container.Resolve (), non? J'installe juste à retourner un faux iProgram.

Aucun lien information de fond. Je trialing Typemock parce que Autofac utilise des méthodes d'extension et largement Moq ne les railler

Était-ce utile?

La solution

Un couple de choses qui peuvent aider - d'abord, vous pouvez se moquer des appels Resolve() avec Moq par la mise en place IComponentContext.Resolve(), qui

toutes les méthodes d'extension à déléguer.

En second lieu, Autofac est conçu de telle sorte que vous ne devriez pas avoir à utiliser ses interfaces de vos composants. Voir des exemples:

Si vous devez utiliser (et donc simulé) IContainer ou une interface similaire, vous pouvez probablement faire la même chose en utilisant le Func, IIndex et / ou types de relations de Owned.

Hope this helps! Nick

Autres conseils

Malheureusement, il y a actuellement un bogue dans Isolateur, ce qui évite truquer des conteneurs Autofac. Nous travaillons pour le résoudre le plus rapidement possible.

Dans le même temps, est-il une raison que vous ne l'utilisez Autofac comme prévu, ce qui signifie qu'il a retourner une instance de faux, tels que:

[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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top