ASP.NET - Wie Sie Unit Test WebControls?

stimmen
13

In Ordung.

So denke, ich es an der Zeit, ich in Unit-Tests zu bekommen, da jeder über sie lange genug hämmern auf worden ist. Ich habe installiert NUnit und durch ein paar „Intro zu Unit-Tests“ Typ Tutorials gegangen.

Ich setze derzeit einen kleinen Rahmen zusammen mit dem Wiederaufbau eines unserer Web-Anwendungen zu helfen, also habe ich ein VS2008-Projekt für meine Rahmen und ich möchte Unit-Test es erstellt, wie ich gehen.

Wie auf der Erde gehe ich über die Einheit WebControls testen? Die Methoden sind alle oder privaten geschützt, und da es ein Rahmen ist, gibt es nicht viel anderes als WebControls.

Alle Zeiger?

Verbrennungen

Veröffentlicht am 27/08/2008 um 21:19
quelle vom benutzer
In anderen Sprachen...                            


9 antworten

stimmen
8

Sie können ohne Verwendung eines ausgewachsenen Rahmen Model-View-Controller oder Model-View-Presenter Architekturen tun. Sie fanden bereits heraus, dass Komponententests ui-Komponenten schwierig ist. Es gibt Möglichkeiten, um das, aber Sie wollen wahrscheinlich nicht, diesen Weg zu gehen. Normalerweise wird dies Ihre Tests sehr schwer machen, zu halten, mehr Wartung Alptraum ist etwas Programmierer ohne :-) tun kann

Versuchen Sie, die Funktionalität, die Sie in einem „Controller“ testen wollen, trennen oder „Moderator“ -Klasse. Dann diese Klasse testen. Um es testbar Sie die Usercontrol Klasse verstecken können (die Ansicht) hinter einer Schnittstelle und machen den Controller oder Moderator Gespräch mit dem Blick über die Schnittstelle. Auf diese Weise kann man den Blick in Ihren Tests Mock-up.

Ich weiß, das klingt wie eine Menge Arbeit und es scheint, wie dieses Problem zu umgehen, aber wenn Sie daran gewöhnen, es ist eine wirklich schöne Architektur, die es viel einfacher zu ändern ui Verhalten macht. Sie können jederzeit beginnen, einen „echten“ MVC-Framework verwenden, wenn Sie wirklich es brauchen :-)

Beantwortet am 27/08/2008 um 21:37
quelle vom benutzer

stimmen
5

Ues das assembly:InternalsVisibleToAttribut , und Sie werden in der Lage , diese privaten Mitglieder zugreifen.

Legen Sie es in Ihrem webcontrol Projekts AssemblyInfo.cs (unter Eigenschaften Knoten)

[assembly:InternalsVisibleTo("YourTestProjectName")]
Beantwortet am 27/08/2008 um 21:22
quelle vom benutzer

stimmen
3

Sie haben den größten Schmerz Punkt von ASP.NET gefunden. Soweit abgedichtet, Privatunterricht, die Unit-Tests behindern.

Dies ist der Hauptgrund dafür, dass TDD Menschen einen MVC-Framework (ASP.NET MVC, Schloss Monorail) verwenden, da es eine klare Trennung von Ihrer Ansicht nach Vorlagen und Ihrer Steuerungslogik zur Verfügung stellt. Die Regler sind voll prüfbar.

Beantwortet am 27/08/2008 um 21:23
quelle vom benutzer

stimmen
1

Sie könnten auch an Testkomponenten über den Browser aus , als ein Benutzer sie mit einem Test - Framework wie sehen würde WebAii . Ich habe es kühl arbeiten und seine ziemlich gesehen. Ich habe auch gesagt, Sie es in automatisierten baut stecken können , aber ich habe das nicht als die noch nicht gesehen.

Ich hoffe es hilft ...

Beantwortet am 23/09/2009 um 19:46
quelle vom benutzer

stimmen
1

Dies ist ein alter Artikel jetzt, aber ich wurde mit NUnitASP zu nunit Tests für asp.net WebControls im Jahr 2004. In diesem Artikel gibt ein ausführliches Beispiel zum Testen einer einfachen Steuerung mit ihrem Konzept der Schaffung eines entsprechenden „Tester“ Klasse zu schreiben, die kapselt Details Ihrer Kontrolle von Ihnen Tests. Der Tester kann (soll) auch in der gleichen Anordnung wie Ihre Steuerung so einige Dinge zwischen ihnen teilen (zB Hilfsfunktionen, Konstanten, etc.).

Ich benutzen die Technik (und andere verwenden Varianten der Technik) auch heute noch sehr anspruchsvolle Kontrollen zu testen.

Ich hoffe, das ist hilfreich.

Beantwortet am 21/03/2009 um 16:37
quelle vom benutzer

stimmen
0

Sie testen sie wie folgt aus:

[Test]
public void ConditionQueryBuilderTest_RendersProperHtml()
{
    var sw = new StringWriter();
    var queryBuilder = new ConditionQueryBuilderStub
    {
        ID = "UnitTestbuilder",
        QueryBuilderURL = @"\SomeAspxPage\SomeWebMethod",
        ResetQueryBuilderURL = @"\SomeAspxPage\OnQueryBuilderReset",
        FilterValuesCollection = new Dictionary<int, string> { {15, "Some Condition"}}
    };
    queryBuilder.RenderAllContents(new HtmlTextWriter(sw));

    AppendLog(sw.ToString());

    Assert.AreEqual(ExpectedHtml, sw.ToString()); // ExpectedHTML is the raw expected HTML
}

Hier ist mein Stummel:

internal class ConditionQueryBuilderStub : ConditionQueryBuilder // ConditionQueryBuilder is a WebControl
{
    internal void RenderAllContents(HtmlTextWriter writer)
    {
        RenderContents(writer);
    }
}
Beantwortet am 08/03/2018 um 15:34
quelle vom benutzer

stimmen
0

Ivonna kann WebControls in Isolation testen, im Asp.Net Kontext Rufen session.GetControl ( „Path.ascx“) und stellen Sie sicher , dass sie alle notwendigen Eigenschaften hat.

Beantwortet am 23/09/2009 um 19:41
quelle vom benutzer

stimmen
0

Sie können auch einen Blick auf diese nehmen Rhino Iglu Rahmen. Es ist ein kompromittierter MVC - Framework für WebForms.

Beantwortet am 03/09/2008 um 17:25
quelle vom benutzer

stimmen
0

Der MVC-Framework oben erwähnt ist die beste Art und Weise zu testen, was die Steuerung des Fall ist. Allerdings testen, wie es funktioniert, ist ein bisschen anders.

Das ist völlig aus dem Stehgreif, aber man könnte der Benutzer die Kontrolle aussetzen einige geschützte Methoden und Eigenschaften machen Validierungsinformationen zurückzukehren und haben dann eine Kontrollprüfung Benutzer erben. Das Steuerelement kann bevölkern Felder, Druckknöpfe und was nicht. Art chaotisch, aber es könnte funktionieren.

Beantwortet am 27/08/2008 um 21:38
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more