Ich bin relativ neu zu Komponententests und sehr neu zu C#, aber ich habe versucht, Code zu testen, der statische Klassen mit statischen Methoden verwendet, und es scheint wie ich habe um große Mengen an Boilerplate-Code zu schreiben, um zu testen, und dieser Code müsste dann wahrscheinlich auch getestet werden.Testen von statischen Klassen und Methoden in C# .NET
Zum Beispiel: Ich verwende die System.Web.Security.Membership-Klasse, mit einer Methode ValidateUser
darauf. Es scheint, als ob ich eine Schnittstelle IMembership
mit der Methode ValidateUser
erstellen und dann eine Klasse MembershipWrapper
erstellen muss, die IMembership
implementiert, die Methode ValidateUser
implementiert und die Argumente an die tatsächliche Klasse Membership
weitergibt. Dann brauche ich Eigenschaften in meiner Klasse, die die Membership
verwendet, um den Wrapper zu referenzieren, so dass ich die Abhängigkeit für ein Mock-Objekt während des Testens injizieren kann.
Also, um 1 Codezeile zu testen, die Membership
verwendet, musste ich eine Schnittstelle und eine Klasse erstellen und eine Eigenschaft und Konstruktorcode zu meiner Klasse hinzufügen. Das scheint falsch zu sein, also muss ich etwas falsch machen. Wie sollte ich diese Tests durchführen? Ich habe mir kurz einige Frameworks/Bibliotheken angeschaut, die Dependency-Injection durchführen, aber sie scheinen immer noch eine Menge Standard zu benötigen oder ein tiefes Verständnis davon, was unter der Haube passiert.
Ich bin all meinen Code lose gekoppelten zur Herstellung und Dependency Injection scheint, wie die Art und Weise, es zu tun.Es scheint nur so, als ob etwas so Grundlegendes und Wichtiges für jede Anwendung so viel Vorabcode erfordert, es wäre gelöst worden, aber ich kann nichts finden, was aussieht, als ob es das Problem tatsächlich löst. – danpalmer
@danpalmer tatsächlich können Sie etwas wie TypeMock verwenden, um statische Methoden zu verspotten, aber das wird Ihren Code nicht lose gekoppelt –
Yeah, TypeMock ist nicht wirklich eine Option, da es Software bezahlt und ich bleibe bei Open-Source-Sachen so viel so wie ich das machen kann. Aber danke für die Empfehlung. – danpalmer