2009-04-29 31 views
5

Myślałem o pisaniu testów jednostkowych dla moich projektów PHP/MySQL.Testowanie jednostek w PHP?

Rzeczą, która mnie trapi jest to, że mogę testować takie rzeczy, jak sprawdzanie poprawności formularza, funkcje ajax i funkcje interfejsu użytkownika (takie jak kliknięcie linków). Ponadto nie chcę, aby testy były zależne od jednego aspektu interfejsu użytkownika, więc gdybym przeniósł jedno łącze, wszystkie testy się zepsują.

Czy ktoś ma jakieś pomysły/sugestie na temat części kodu, które powinienem wykonać test jednostkowy, w przybliżeniu ile czasu należy poświęcić na testowanie jednostkowe i inne sugestie/wskazówki?

+1

http://stackoverflow.com/questions/570451/how-to-est-do-unit-testing-for-a-web-application –

Odpowiedz

2

Testy jednostek, przynajmniej z punktu widzenia programowania aplikacji internetowych, nie mogą w rzeczywistości objąć projektu interfejsu użytkownika. Tym, co testuje jednostka, jest pomoc w przetestowaniu wejścia/wyjścia wszystkich metod kontrolera i/lub wszelkich pojedynczych/globalnych funkcji, które kręcisz. Tak więc, jeśli chcesz otrzymać test jednostkowy na walidacji formularzy, upewnij się, że aplikacja jest skonstruowana w taki sposób, że możesz przetestować funkcję sprawdzania poprawności niezależnie od interfejsu użytkownika.

class SomeController extends ... { 
    ... function isAPhoneNumber($string){ 
     if(...) { 
      return true; 
     } 
     else (...) { 
      return false; 
     } 
    } 
} 

To pozostawia cały kod, który dostaje wartość TO tę metodę nietestowaną.Jedynym skutecznym sposobem testowania tego jest testowanie interfejsu użytkownika bezpośrednio za pomocą pilotów zdalnego sterowania przeglądarki, takich jak Selenium. PHPUnit testing framework ma haki do używania sterownika PHP Selenium, co oznacza, że ​​możesz używać tego samego testera, co inne testy jednostkowe.

Nigdy nie będziesz mieć 100% pewności, że niewinna zmiana nie spowoduje przeprowadzenia testów Selenium, ale istnieją kroki, które możesz wykonać w trakcie opracowywania, aby zminimalizować to. Selenium ma various different ways, aby "celować" w element, który kliknie lub wpisze. Chcesz używać kierowania, które jest tak szczegółowe, jak to możliwe, więc spróbuj dać wszystkim swoim (X) węzłom HTML unikalny element ID. To gwarantuje, że selen kliknie link bez względu na to, gdzie kończy się na stronie.

Gdy unikalny identyfikator nie jest możliwy, spróbuj zawinąć wspólne elementy za pomocą jakiegoś elementu HTML, który ma unikalny identyfikator, a następnie użyj umiejętności selekcji Xpath tarczą, by powiedzieć "kliknij link zawierający tekst", który znajduje się w div o identyfikatorze „foo”, lub kliknij trzeci link w div o identyfikatorze „foo”.

Jeśli nie jest to oczywiste z elementów powyżej, nie polegać na wybory kierowanych że selen IDE (lub inne nagrywarki) wybierze ich celem jest upewnienie się, że uruchomienie testu na tej samej stronie daje takie same wyniki, które mogą dać bardzo delikatną ścieżkę xpath. Zawsze przeglądaj testy, które rejestrujesz i naprawiaj kiepskie ustawienia kierowania.

Nie ma łatwych odpowiedzi tutaj. Gdyby tak było, aplikacje internetowe byłyby o wiele mniej błędne.

0

Wypróbuj SeleniumHQ.org.

To rozszerzenie przeglądarki, które pozwala rejestrować kliknięcia, pisanie na klawiaturze i ruchy myszą itp., Np. Makro. Makra można zapisywać jako testy i odtwarzać w celu przetestowania aplikacji internetowych.

Wygląda na to, że mają też inne wersje produktu, które mogą przeprowadzać testy, uruchamiając inne przeglądarki.

0

Nie wiem, czy moja odpowiedź będzie pomocna, ponieważ mam to samo pytanie.

W każdym razie, jeśli jeszcze tego nie zrobiłeś, spróbuj Windmill, który uważam za bardzo przydatny, szybki i brudny i działa w głównych przeglądarkach.

Zmiana linku nie zmienia testu (w większości przypadków myślę) =)

3

Należy kciuk za pośrednictwem tej części documentation of SimpleTest i spojrzeć na metody mają one do testowania

  • zawartość strony
  • nawigacja
  • ciasteczka
  • zdjęć
  • frames
  • złożenie formularza
  • przekierowuje
  • proxy

Nawet jeśli nie kończy się przy użyciu SimpleTest, może być warte obejrzenia.

Dla mnie najbardziej przydatną rzeczą jest testowanie przesyłania formularzy, w tym każdego parametru w żądaniu GET lub POST dla każdego formularza, który jest niezbędny do działania witryny.

Niezależnie od tego, czy chcesz przetestować wiele swoich interfejsów, czy tylko małe kluczowe obszary, zależy to od Ciebie.

+0

oops, dzięki za naprawienie literówki – thomasrutter