Verwendung von Autofac mit moq

8

Ich muss meinen Autofac-Container mit einer bestimmten Schnittstelle registrieren, für diesen Fall möchte ich den Schein auflösen.

Wie kann ich es tun?

Ich habe es versucht:

%Vor%

Ich möchte meinen Code nicht ändern, um etwas anderes als IStudyLoader zu lösen, aber Mock<IStudyLoader> ist nicht substituierbar für IStudyLoader ; Beispiel: Mock<IStudyLoader>.Object ist für IStudyLoader ersetzbar, aber ich kann Mock<IStudyLoader>.Object nicht registrieren, weil es kein Typ ist.

Korrigiere mich bitte; Ich habe das Gefühl, dass mir etwas fehlt.

(Ich habe eine andere Einschränkung, ich kann keinen anderen Container als ApplicationContainer.GetApplicationContainer() verwenden)

(Ich denke, es ist besser, die Abhängigkeit beim Testen manuell zu injizieren, aber ich möchte den Produktionscode dieses Mal nicht ändern.)

    
Delashmate 09.11.2011, 07:49
quelle

5 Antworten

16

Ich habe die Lösung gefunden, Ja, das ist möglich!

%Vor%     
Delashmate 09.11.2011, 08:38
quelle
5

Die Methode, nach der Sie suchen, heißt RegisterInstance :

%Vor%

Ein vorhandener Container (in Ihrem Fall der AppContainer), der bereits eine Registrierung für die Schnittstelle enthält, die Sie verspotten möchten, kann die Instanz nicht auflösen . Es wird weiterhin die Produktionsinstanz auflösen.

Ein "Workaround", den ich Ihnen unbedingt empfehlen sollte, ist, den AppContainer nicht in Ihren Test einzubeziehen, sondern einen Container zu erstellen, der auf Ihren Test zugeschnitten ist, damit Sie besser steuern können, was dort hinein geht. Der Effekt ist, dass Sie jede Mock-Instanz, die Sie benötigen, zusammen mit dem SUT registrieren.

    
Peter Lillevold 09.11.2011 08:16
quelle
1

Ich habe keine besonderen Erfahrungen mit Autofac, aber die meisten anderen Container, mit denen ich gearbeitet habe, erlauben es, eine Instanz eines Objekts zu registrieren, das bereits erstellt wurde. Sie können also Ihren Schein erstellen und dann mock.Object als Implementierung für IStudyLoader registrieren. Konsultieren Sie die Autofac-Dokumentation, um dies zu tun.

    
Vladimir Perevalov 09.11.2011 07:55
quelle
0

Da diese Frage gestellt wurde, gibt es jetzt ein AutoFac.Extras.Moq -Paket, unterstützt von AutoFac:

Ссылка

Damit können Sie Abhängigkeiten innerhalb Ihrer Komponententests erstellen

    
garfbradaz 10.12.2017 08:59
quelle
0

Alte Frage, aber AutoFac Jetzt seit Version 4.0.1 unterstützt Moq4 und bietet zusätzliches Paket an, das Sie installieren können Autofac.Extras.Moq

%Vor%

Autofac.Extras.Moq automatische Installation von AutoFac und Moq

Sie müssen keinen Container erstellen und StudyLoader registrieren. Es ist implizit von Autofac.Extras.Moq definiert.

Autofac.Extras.Moq ist wertvoll für verschachtelte Abhängigkeit. Es ist nicht wichtig, den gesamten Abhängigkeitsgraphen zu registrieren. Verursachen Sie nur Ihr SystemUnderTest SUT-Objekt

Sie können Ihren Testfall wie folgt implementieren:

%Vor%     
M.Hassan 27.01.2018 23:28
quelle

Tags und Links