Fo Unit testet ASP.NET-Steuerelemente Ich brauche eine Stubbed-Seite.
Ich kann ein ASP.NET-Seitenobjekt in meinen Komponententests erstellen, indem ich System.Web.UI.Page unterklassiere. Ich kann jedoch keine Methode zum Festlegen von Page.Form finden. Hinzufügen eines Formulars mit Attribut (Runat, Server) funktioniert nicht. Überladen des Formulars in meiner Unterklasse gibt nicht die erforderliche Funktionalität.
Kontext: Ich versuche, einige hausgemachte ASP.NET-Steuerelemente zu testen. Diese Steuerung erfordert, dass Page und Page.Form nicht null sind.
Irgendwelche Vorschläge?
Versuchen Sie, eine Schnittstelle IPage
und IForm
zu definieren, die die erforderlichen Methoden und Eigenschaften implementiert und Klassen erstellt, die diese Schnittstellen implementieren und eine Klasse Page
oder Form
umbrechen. Auf diese Weise können Sie die Logik in diesen Steuerelementen testen, ohne während des Komponententests das ASP.NET-Framework aufzurufen.
UPDATE:
Das Überschreiben der Seiteneigenschaft wird brüchig sein und ist nicht ratsam. Stattdessen sollten Sie versuchen, die Menge an nicht testbarem Code zu minimieren, indem Sie Logik in Methoden extrahieren, die nicht von ASP.NET-spezifischen (schwer zu testenden) Teilen abhängen. Sehen Sie sich das folgende Beispiel an:
%Vor%Indem Sie die Logik aus schwer zu testenden Methoden extrahieren, können Sie diese extrahierten Methoden direkt in Ihren Tests aufrufen. Zum Beispiel:
%Vor%Es wäre sogar noch besser, wenn Sie den zu testenden Code in seine eigene Klasse extrahieren und von Ihrem WebControl aus aufrufen könnten. Dies ist jedoch nicht immer möglich.
Ich hoffe, das macht Sinn.
Was genau möchten Sie testen? Wenn das, was Sie testen, nicht vollständig von der Seite selbst abhängig ist, können Sie möglicherweise vermeiden, dass eine Instanz der Seite sich viel Mühe erspart. Sehen Sie sich den folgenden Link an:
Ссылка .
Wenn jedoch das, was Sie zu testen versuchen, wirklich von der Seitenklasse abhängt, dann wickeln Sie es mit Ihrer eigenen Klasse ein, die Zugriffsmethoden für die Daten bereitstellt. Dann verwandle diese Klasse in eine Schnittstelle, die als Parameter für die Methode oder den Konstruktor verwendet werden kann.
Beispiel:
%Vor%Ich hatte vor ein paar Jahren das gleiche Problem mit ASP.NET und wir haben Fowlers Passive View-Muster implementiert , und es gelang, die gesamte Logikeinheit zu testen (und die Tests der ziemlich dummen Ansichten auf manuelle Tests zu belassen).
Tags und Links .net c# unit-testing asp.net vb.net