Autor Beitrag
Kasko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Sa 02.03.24 17:51 
Ich erstelle eine Erweiterung für Microsoft.AspNetCore.Identity, um Entity-Based-Access-Control zu unterstützen. Ich habe mehrere Komponenten, darunter eigene Middleware, Auth-Requirements und Basiskomponenten wie den eigenen Modelbinder, den ich in dieser Antwort gepostet habe.

Obwohl ich einige dieser Komponenten testen könnte, indem ich die erforderlichen Metadaten selbst bereitstelle, ist es viel bequemer, sie einfach im Kontext einer API zu verwenden, die diese Metadaten bereitstellt.

Das Testen einer vorhandenen API ist ziemlich einfach, indem man eine WebApplicationFactory und das Programm oder StartUp verwendet.

Aber in diesem Fall habe ich keine API, also müsste ich eine API für die Testfälle erstellen. Eine große API, die alle Testfälle enthält, wäre möglicherweise nicht die beste Lösung, da ich die Komponenten nicht isoliert testen kann. Einige der Komponenten benötigen Datenbankzugriff, andere nicht. Alle Aufrufe würden über die benutzerdefinierte Middleware laufen, da ich sie zum Testen hinzufügen muss.

Den benutzerdefinierten Modelbinder z.B. würde ich testen, indem ich ihn einfach in einem Controller-Endpunkt aufrufe und dann das Ergebnis mit dem Model vergleiche, das im Endpunkt-Methodenparameter von Asp.Net bereitgestellt wird. Aber die Middleware könnte darauf einwirken.

Daher ist es möglicherweise besser, mehrere separate APIs zu erstellen. Wenn jedoch mehrere Controller für unterschiedliche Testfälle und unterschiedliche APIs im selben Projekt vorhanden sind, würden MapControllers einfach alle Controller in allen APIs zuordnen, obwohl diese APIs möglicherweise nicht über die erforderlichen Services verfügen müssen ... Der nächste Schritt wäre also die Erstellung eines separaten Projekts für jede API-Testgruppe. Doch mittlerweile nimmt die Komplexität eher einfacher Tests immer weiter zu ...

Was sind also die Best Practices zum Testen von Komponenten, die den Kontext einer Web-API benötigen?

PS: Würden man diese Tests trotzdem noch als Integrationtests bezeichnen? Oder handelt es sich jetzt um E2E-Tests oder andere Tests?