WatiN–testowanie aplikacji ASP.NET

Ostatnio pokazałem jak działa WatiN na przykładzie aplikacji konsolowej. Zwykle nie jest to co chcemy uzyskać. W praktyce korzysta się z jakiegoś framework’u do unit testów. W dzisiejszym wpisie pokażę jak to zrobić oraz jak uruchomić IIS Express.

Pamiętamy również, że musieliśmy dodać parametr STAThread ponieważ w przeciwnym razie został wyrzucany wyjątek “An exception of type ‘System.Threading.ThreadStateException’ occurred in WatiN.Core.dll but was not handled in user code"”.

W tym problem, że testy jednostkowe nie są uruchamiane w STA i dostaniemy taki sam wyjątek. Z tego względu, każdą klasę testów należy oznakować atrybutem RequiresSTAAttribute np.:

[TestFixture]
[RequiresSTAAttribute]
public class Tests
{
   [Test]
   public void SampleTest()
   {     
       using (var browser = new IE("http://www.google.com"))
       {
           browser.TextField(Find.ByName("q")).TypeText("Hello World!");
           browser.Button(Find.ByName("btnG")).Click();
       }

   }      
}

W praktyce nie testuje się zewnętrznych stron. Celem tego postu jest pokazanie jak testować aplikację ASP.NET za pomocą nUnit i WatIn. Z tego względu musimy w SetUp uruchomić najpierw serwer hostujący daną stronę. Uruchamia go się za pomocą następującej komendy:

WebDev.WebServer /port:8080 /path:"C:\Website"

Z kolei proces WebDev.WebServer można znaleźć w:

C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0

Jeśli uruchomimy powyższy proces to serwer będzie hostował daną aplikację. Dalej w testach możemy już posługiwać się adresem typu localhost:8080/SampleWebsite. W wpisie jednak będę używał www.google.pl bo po prostu nie chcę tworzyć specjalnie strony ASP.NET (jak już serwer IIS jest uruchomiony to nie ma różnicy już jaką stronę ładujemy).

Przykład:

using (var browser = new IE("http://www.google.pl"))
{
    browser.TextField(Find.ByName("q")).Value = "Piotr Zielinski c#";
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("www.pzielinski.com"));
}

Powyższy test zweryfikuje, czy po wpisaniu mojego imienia i nazwiska, link do blogu znajduje się na pierwszej stronie wyników.

Leave a Reply

Your email address will not be published.