Jak przeprowadzić test jednostkowy strony internetowej? Wydaje mi się, że ponieważ tak wiele zależy od stanu i wkładu użytkownika, nie byłoby to możliwe.
Jeśli nie jest to wykonalne, czy istnieje ważna automatyczna alternatywa?
Jak przeprowadzić test jednostkowy strony internetowej? Wydaje mi się, że ponieważ tak wiele zależy od stanu i wkładu użytkownika, nie byłoby to możliwe.
Jeśli nie jest to wykonalne, czy istnieje ważna automatyczna alternatywa?
Odpowiedzi:
Tak, możesz. Musisz tylko uważnie rozdzielić swoje obawy. Krótko mówiąc, musisz usunąć całą logikę z tyłu kodu i umieścić ją w innych klasach.
Istnieją dwa typowe sposoby, aby to zrobić.
Prostym sposobem jest ponowne przemyślenie wszystkich procedur obsługi zdarzeń pod kątem: „Jakie informacje podaje mi system? Jakie informacje muszę wypełnić na stronie?” a następnie podaj klasę usług, która dokonuje tej konwersji.
W takim przypadku warstwa usługowa powinna wiedzieć bardzo niewiele o charakterze warstwy prezentacji. Nadal musisz pobrać dane zwrócone z usługi i wypełnić właściwe komponenty WebForm w swoim kodzie, a to pozostaje niezbadane (przynajmniej w testach jednostkowych nadal możesz zastosować testy integracyjne). Ale rzadko zdarza się, że kod się psuje, istnieje większe prawdopodobieństwo niepowodzenia logiki.
Bardziej skomplikowanym, ale bardziej skutecznym sposobem jest użycie wzorca Prezentera widoku modelu . Kiedy próbowaliśmy, okazało się, że Presenters szybko związał się z frameworkiem i im bardziej opracowaliśmy MVP, tym bardziej jasne było, że MVP naprawdę chciałoby być MVC, ale nie mogło tak być.
To powiedziawszy, inni zrobili to bardzo skutecznie - dostępna jest nawet platforma webformsmvp, aby usunąć ciężkie podnoszenie - więc twój przebieg może się różnić.
Oczywiście cała strona formularzy internetowych nie jest jednostką, a zatem nie może być testowana jednostkowo. Istnieją jednak pewne rzeczy, które możesz zrobić dla testów automatycznych:
Przykro mi, że brakuje części „jednostka” pytania ...
SeleniumHQ jest twoim przyjacielem do testów z interfejsu. To nie jest test jednostkowy, bardziej jak testowanie czarnej skrzynki. Nadal musisz pomyśleć o prawidłowych przypadkach testowych ...
Mówiąc z doświadczenia: tylko jeśli jest to zrobione dobrze. Przez „właściwy” rozumiem minimalny kod i coś w rodzaju wspomnianego powyżej Model-View-Presenter, aby formularz internetowy był „głupi”. Zwykle okazuje się to bardzo trudne w przypadku aplikacji typu brownfield, ponieważ nie zostały one zaprojektowane z myślą o tym i jest to prawie herkulesowy wysiłek, aby przeredagować / przepisać strony, aby z niego skorzystać.
Uważam, że jednostkowe testy sieciowe są niezwykle użyteczne, nawet jeśli służą jedynie do ogólnego zrozumienia błędu regresji lub nowych projektów.
Jeśli chodzi o stan, tworzysz testy jednostkowe, tak jak w przypadku testów innych niż interfejs użytkownika - usuwają one bazę danych na początku testu i odbudowują bazę danych, aby zawierała jedynie stan początkowy. Każdy test jednostkowy obejmuje następnie pojedynczą stronę lub zwykle odrębne zadanie na stronie.
http://watin.org/ to kolejne narzędzie do testowania stron internetowych, ale dla C # / .NET. Testy zapisujesz jako testy jednostkowe:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
Obecnie jest oparty na przeglądarce IE, ale ma pewne eksperymentalne wsparcie dla Firefoksa i Chrome. Możesz praktycznie zautomatyzować wszystko, co robisz w testach ręcznych, w tym interakcję JavaScript.
Nie można tak naprawdę przetestować witryny internetowej za pomocą jednostki, po prostu dlatego, że żądania sieciowe odbywają się za pośrednictwem drutu (lub stosu TCP). Zatem testy nie pasują do definicji „testu jednostkowego”, prawdopodobnie byłyby to testy kompleksowe.
Do tego rodzaju testów możesz użyć pakietu takiego jak Selenium, który uruchamia przeglądarkę internetową za kulisami. Słowo ostrzeżenia: zwykle tego rodzaju testy są bardzo trudne i nieprzewidywalne, ponieważ istnieje wiele ruchomych części!
Co ciekawsze, martwi mnie trochę, dlaczego w ogóle trzeba testować formularze internetowe. Czy nie umieszczasz zbyt wiele logiki w kodzie i nie masz przypadkowej anemicznej logiki biznesowej?
W ciągu ostatnich 5 lat Jasmine stała się kluczowym narzędziem do testów jednostkowych. Często jest włączany do automatycznego testowania kompilacji za pomocą Node i npm
Na https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine to platforma do testowania otwartego kodu JavaScript. [2] Ma on działać na dowolnej platformie obsługującej JavaScript, nie ingerować w aplikację ani IDE i mieć łatwą do odczytania składnię. Jest pod silnym wpływem innych platform testowania jednostek, takich jak ScrewUnit, JSSpec, JSpec i RSpec. [3]
Pomimo wszystkich wzmianek o javascript, może być również używany do testowania jednostkowego zwykłego formularza internetowego.
Podczas opracowywania strony ASP.NET mogliśmy przeprowadzić testy jednostkowe na:
Możliwe jest TDD wszystko, w zależności od architektury. Jedyne, czego nie można przetestować jednostkowo, to układ pliku znaczników.