Ist es möglich, Dependency Injection mit xUnit?
Habe ich eine test-Klasse mit einem Konstruktor, der braucht ein IService.
public class ConsumerTests
{
private readonly IService _service;
public ConsumerTests(IService servie)
{
_service = service;
}
[Fact]
public void Should_()
{
//use _service
}
}
Möchte ich plugin meine DI-container der Wahl zu bauen, die test-Klasse.
Ist das möglich mit xUnit?
- Hast du eine Lösung finden? Ich habe das gleiche problem. Ich habe eine Menge von Abhängigkeiten in meinem xUnit-Tests, und es ist nicht eine richtige Lösung zu instanziieren 30 Abhängigkeiten von hand.
- hi @MohammedNoureldin aktualisiert-Lösungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist jetzt, diese beiden Fragen und Antworten konsolidiert werden sollten, meiner Meinung nach, siehe Antwort hier
Net Core: Führen Sie Alle Dependency Injection in Xunit Test für AppService, Repository, etc.
Verwenden von Custom Web Application Factory und ServiceProvider.GetRequiredService unten, fühlen Sie sich frei zu Bearbeiten und zu optimieren Antwort
CustomWebApplicationFactory:
Integration Test:
Ressourcen:
https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.2
https://fullstackmark.com/post/20/painless-integration-testing-with-aspnet-core-web-api
Gibt es eine Möglichkeit, dies zu tun nuget-Paket aus dieser Quelle-code: https://github.com/dennisroche/xunit.ioc.autofac
Es funktioniert großartig, solange Sie
[Fact]
, aber dann habe ich blockiert, wenn begonnen, mit[Theory]
. Es ist ein pull-request zu lösen.Freizugeben, um mich, ich verwendet, CollectionFixture zu injizieren Behälter und aus dem Behälter, ich löse die Schnittstelle.
Was sind Sie versuchen zu testen? Die Umsetzung der
IService
oder die Verdrahtung der DI-container?Wenn Sie den Test
IService
Implementierungen, sollten Sie instanziieren Sie direkt in die test - (und lustig irgendwelche Abhängigkeiten):Wenn Sie versuchen, testen Sie die Verdrahtung von der DI-container, die Sie brauchen, um zu erreichen, und ergreifen Sie die konfigurierten container explizit. Es gibt keine "Komposition root", die das für Sie tun (pseudo-code folgt, der Art des Autofac aromatisiert):
Wenn Sie mit xUnit für die Ausführung von Integrationstests, wo Sie brauchen, um zu verwenden, die dasselbe Objekt in mehreren tests, betrachten Leuchten: http://xunit.github.io/docs/shared-context.html.
Ja, es ist möglich, mit Xunit.DependencyInjection
und können Sie injizieren Ihre Dienstleistungen
https://github.com/pengweiqhca/Xunit.DependencyInjection