2009-05-07 9 views
1

Der Versuch, Nunit in ASP.Net arbeiten zu lassen.Unit/Integration Testcode, der HttpCurrentContext verwendet

Das Problem ist, ich teste ein benutzerdefiniertes Steuerelement - die auf eine globale Ressource verweist.

Wenn ich Unit-Test versuchen, es

/// </summary> 
     [Test] 
     public void TestSetAndGetNumber() 
     { 
      PhoneNumber phone = new PhoneNumber(PhoneNumber.NumberType.Business, "", true, ""); 
      string expectedString = "1-800-Goat-Phone"; 
      string resultString = "1-800-Goat-Phone"; 
      resultString = phone.Value = resultString; 
      Assert.AreEqual(expectedString, resultString, "GetNumberMatch method returned unexpected result."); 
      Assert.Fail("Create or modify test(s)."); 
     } 

ich bekommen "kann App_GlobalResources nicht geladen werden".

Ich versuche herauszufinden, ob ich vielleicht versuchen sollte, HttpContext Using You've been Haacked blog post zu simulieren, aber niemand hat verifiziert, dass dies machbar ist.

Antwort

1

Dies ist ein typisches Szenario, in dem Sie Ihre Klasse richtig einrichten sollten, um testbar zu sein. Wenn Sie eine externe Abhängigkeit haben (Verweise auf eine globale Ressource), sollten Sie eine Zusammenfassung erstellen, damit Sie sich darüber lustig machen können.

Ich schlage vor, Sie sehen sich dies an book, und es erklärt, wie Sie Ihre Klasse testfähiger zu gestalten. Alternativ können Sie Beispiele von moq herunterladen. Bei der Einrichtung von Komponententests geht es viel mehr darum, Ihre Klasse auf eine lose gekoppelte Weise zu gestalten, sodass Sie sie ohne Interaktion mit DB/Dateisystem/anderer Ressource effektiv testen können.

+0

Die getestete Klasse ist ein benutzerdefiniertes Steuerelement, PhoneNumber. Alle Instanzen der Telefonnummer erfordern derzeit einen Treffer auf GlobalResources, um den Etikettentext usw. zu erhalten. Ich bin nicht sicher, wie Sie die Klasse ändern würden, damit Sie Teile davon testen können, ohne GlobalResource zu treffen. Wenn PhoneNumber eine Schnittstelle verwendet, um auf GlobalResources zuzugreifen, sehe ich nicht, wie der Unit-Test diese Schnittstelle sauber ändern kann, um Scheindaten zurückzugeben. –

+0

Was ist Ihr Zweck des Testens? Möchten Sie den String-Inhalt in GlobalResource testen? Ich bin ein bisschen verwirrt mit dem, was Sie genau testen wollen? –

+0

einige Logik im Getter-Setter. Ich weiß, dass die Antwort einiger Leute darin besteht, keine Logik im Getter Setter zu haben ... aber es ist eine Getter/Setter-Typ-Logik (Anzeigelogik). Ich bin kein großer Fan von Schnittstellen, die aus Design-Design-Sicht wenig Wert bieten. wirklich möchte ich einfach httpcontext im unit test simulieren, aber vielleicht wünsche ich mir einen stern. –

1

Das mag glatt klingen, aber können Sie die PhoneNumber-Klasse nicht einfach so umgestalten, dass sie testbar ist?

Wenn Sie Komponententests verwenden möchten, scheint dies der richtige Weg zu sein. Wenn Sie die PhoneNumber-Klasse nicht ändern können, warum testen Sie sie dann?

Verwandte Themen