SimpleTest vs PHPunit

127

Zastanawiałem się, czy ktoś, kto ma doświadczenie w obu tych sprawach, może rzucić trochę światła na znaczącą różnicę między nimi, jeśli w ogóle?

Jakaś konkretna siła każdego z nich sprawia, że ​​nadaje się do konkretnego przypadku?

paan
źródło
Wybrałbym
9
... i dlaczego? Spróbuj wyjaśnić swoją odpowiedź, podaj zasoby / linki / przykłady. O
Manuel
<snark> Dlaczego nie oba? </snark>
Agi Hammerthief

Odpowiedzi:

90

To pytanie jest dość przestarzałe, ale ponieważ wciąż pojawia się ruch i odpowiedzi, pomyślałem, że powiem tutaj jeszcze raz, mimo że zrobiłem to już w przypadku innych (nowszych) pytań.

Jestem naprawdę zdumiony, że SimpleTest nadal jest uważany za alternatywę dla phpunita. Może jestem po prostu źle poinformowany, ale o ile widziałem:

  • PHPUnit jest standardem; większość frameworków go używa (jak Zend Framework (1 i 2), Cake, Agavi, nawet Symfony porzuca swój własny Framework w Symfony 2 dla phpunita).
  • PHPUnit jest zintegrowany z każdym PHP IDE (Eclipse, Netbeans, Zend Stuide, PHPStorm) i dobrze działa.
  • Simpletest ma rozszerzenie Eclipse dla PHP 5.1 (aka stare) i nic więcej.
  • PHPUnit działa dobrze z każdym serwerem ciągłej integracji, ponieważ generuje wszystkie standardowe pliki dziennika dla pokrycia kodu i raportów z testów.
  • Najprostszy nie. Chociaż nie jest to duży problem, jeśli zaczniesz od tego, to bardzo cię to ugryzie, gdy przestaniesz „tylko testować” i zaczniesz tworzyć oprogramowanie (tak, to stwierdzenie jest prowokujące :) Nie bierz tego zbyt poważnie).
  • PHPUnit jest aktywnie utrzymywane, stabilne i działa świetnie dla każdej bazy kodu, każdego scenariusza i każdego sposobu, w jaki chcesz pisać testy.
  • (Subiektywne) PHPUnit zapewnia znacznie ładniejsze raporty pokrycia kodu niż Simpletest
  • Dzięki PHPUnit otrzymujesz również te raporty w swoim IDE ( Netbeans , Eclipse, ...)
  • Jest też kilka sugestii dotyczących pliku web interface to phpunit tests.

Nie widziałem jeszcze żadnego argumentu na rzecz SimpleTest. Instalacja nie jest nawet prostsza, ponieważ PHPUnit jest dostępny za pośrednictwem gruszki:

pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

a „pierwszy test” wygląda prawie tak samo.

Ponieważ instalacja PHPUnit 3.7jest jeszcze łatwiejsza , wystarczy użyć rozszerzeniaPHAR Archive

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit-3.7.6.phar

lub dla Windows, po prostu pobierając phar i uruchamiając:

php phpunit-.phar

lub podczas korzystania z obsługiwanych sposobów instalacji kompozytora, takich jak

"require-dev": {
    "phpunit/phpunit": "3.7.*"
}

do Twojego pliku composer.json.


Na wszystko, co chcesz przetestować, PHPUnit będzie miało rozwiązanie i będziesz mógł znaleźć pomoc praktycznie wszędzie (SO, kanał #phpunit irc na freenode, prawie każdy programista php;))

Proszę popraw mnie, jeśli stwierdziłem coś złego lub zapomniałem :)

Przegląd narzędzi do testowania PHP

Wideo: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

Slajdy: http://www.slideshare.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

Wspomina takie rzeczy jak Atoum, który nazywa siebie: „Prosty, nowoczesny i intuicyjny framework do testów jednostkowych dla PHP!”


Pełne ujawnienie informacji

Oryginalnie napisałem tę odpowiedź w styczniu 2011 r., Gdzie nie miałem żadnego powiązania z żadnym projektem testowania PHP. Od tego czasu zostałem współtwórcą PHPUnit.

edorian
źródło
5
Odkryłem, że testowanie sieci simpletest było znacznie łatwiejsze do skonfigurowania i uruchomienia niż testy internetowe phpunita. Ponieważ jest to praktycznie konieczne w przypadku php, jest to wygrana dla małych i średnich projektów, w których chcesz po prostu rzucić się w ramy testowe w jednej chwili, a ważne są proste poziomy testów. Na przykład, wykluczając testy internetowe, staram się używać tylko metody assertTrue () w najprostszej formie. Testy internetowe stają się oczywiście bardziej skomplikowane, ale nie muszą być tak przesadnie.
Kzqai
1
"> Ponieważ jest to konieczność w przypadku php" - zdecydowanie się z tym nie zgadzam. Nie widziałem jeszcze żadnego projektu php (lub frameworka), który uruchamia swoje testy przez przeglądarkę. Stwarza wiele problemów bez żadnych korzyści. Czasy, w których kod php został opracowany na współdzielonym systemie hostingowym przy użyciu synchronizacji ftp, są martwe i minęły ( trzymamy kciuki ), a żaden, nawet mały projekt, nie wymaga działającego serwera WWW (co najwyżej jednego php dostarczanego po wyjęciu z pudełka). JEDNOSTKA Testowanie przez przeglądarkę, a nie przez CLI lub IDE jest tak rzadkim przypadkiem użycia, że ​​nie sądzę, by miało to w ogóle znaczenie.
edorian
13
Mocnym powodem, dla którego warto rozważyć SimpleTest zamiast PHPUnit, jest to, że to drugie jest narzędziem wiersza poleceń, które należy zainstalować na serwerze, na którym przeprowadzane są testy, co czasami jest o wiele trudniejsze niż samo includeumieszczanie plików SimpleTest .PHP (jak wyjaśniły inne). dla profesjonalnych programistów budynku z własną PHPUnit środowiska testowego brzmi trudno pokonać, ale jeśli zintegrowanie systemu testowego do aplikacji open-source PHP opartych na miarę „deweloperzy” dla aplikacji może być w najlepszym razie (co nazywam) „programiści zawodowe” , a następnie prostota SimpleTest jest dla mnie naprawdę atrakcyjna. FWIW.
MikeSchinkel
2
@MikeSchinkel Nie mogę się bardziej zgodzić. Użyliśmy SimpleTest jako zintegrowanego rozwiązania do testowania opartego na przeglądarce dla naszej niestandardowej struktury aplikacji. Był zawsze dostępny i nie wymagał żadnej konfiguracji instalacji poza ściąganiem svn, ponieważ znajdował się w źródle frameworka. Przenieśliśmy się do PHPUnit w celu integracji z CIS. Ponieważ jesteśmy sklepem Windows, instalacja i konfiguracja PHPUnit może być koszmarem, a wielu naszych młodszych programistów po prostu psuje środowisko lub traci chęć testowania.
Gavin
1
Link do slajdów jest uszkodzony.
Dmitri Zaitsev
35

Wolę teraz PHPUnit, ale kiedy zaczynałem, korzystałem z SimpleTest, ponieważ nie zawsze miałem dostęp do wiersza poleceń. SimpleTest jest fajny, ale moim zdaniem jedyną rzeczą, jaką ma nad PHPUnit, jest web runner.

Powodem, dla którego lubię PHPUnit, jest to, że integruje się z innymi narzędziami programistycznymi PHP, takimi jak phing (podobnie jak SimpleTest), phpUnderControl i Xinc . Od wersji 3.0 obsługuje symulację , jest aktywnie rozwijany, a dokumentacja jest doskonała.

Naprawdę jedynym sposobem, aby odpowiedzieć sobie na to pytanie, jest wypróbowanie obu przez jakiś czas i przekonanie się, który lepiej pasuje do Twojego stylu.

EDYCJA: Phing integruje się teraz również z SimpleTest.

Eric Scrivner
źródło
4
Uwaga, witryna
phing
18
  • NIE mogłem zrozumieć, jak pobrać i zainstalować PHPUnit.
  • Mogłem jednak łatwo zrozumieć, jak zainstalować SimpleTest.

    (O ile dobrze pamiętam, w instrukcji dla PHPUnit było napisane coś w stylu „zainstaluj go przez PEAR i nie podamy żadnych instrukcji, jak to zrobić w inny sposób”) zobacz:

  • http://www.phpunit.de/manual/current/en/installation.html

W przypadku SimpleTest wystarczy go pobrać i wskazać w kodzie.

Wygrał więc dla mnie Simpletest.

stfan
źródło
4
Przypuszczam, że dokumentacja uległa zmianie, odkąd opublikowałeś wtedy swoją odpowiedź. Dzisiaj wystarczy wpisać 3 polecenia i zostanie ono zainstalowane, nie musisz nawet samodzielnie niczego pobierać.
Anti Veeranna,
5
Możesz zainstalować PHPUnit przez PEAR, pobrać go ręcznie lub pobrać najnowszy kod z github. Na stronie głównej znajduje się wyraźny link do instrukcji instalacji. SimpleTest daje mi tylko jedną opcję, wskazując na sourceforge i jest mnóstwo reklam ...
Potherca
1
W systemie Windows instalacja PHPUnit jest trudna. Musiałem go zainstalować na 2 stacjach roboczych. Pierwsza trwała 3 godziny, z pomocą kanału PEAR IRC. W przypadku drugiego (ten sam system operacyjny) nigdy mi się nie udało. To powiedziawszy, w Linuksie to urok.
FMaz008
1
SimpleTest +1 Łatwy w instalacji Łatwy w użyciu. PHPUnit jest potężny niż jednak najprostszy, aby zaspokoić moje potrzeby.
Cheung,
Wszystko mogło się zmienić od 2009 roku, ale PHPUnit został zainstalowany w ciągu kilku sekund za pomocą zaledwie kilku poleceń w systemie Windows.
Cypher
13

Połowa wymienionych punktów w przyjętej odpowiedzi jest po prostu nieprawdziwa:

SimpleTest ma

  • łatwiejsza konfiguracja (wypakuj do folderu, dołącz i uruchom)
  • po prostu sprawdź folder w kontroli wersji (spróbuj to teraz zrobić z phpunitem :))
  • mniej zależności i dużo rozszerzeń (webtester, formtester, auth)
  • dobry raport o pokryciu kodu, który można łatwo rozszerzyć (kropki, nazwy funkcji, kolory)
  • podsumowanie pokrycia kodu (ostatecznie wylądował w PHPUnit 4.x)
  • przyzwoity web runner i ajax web runner, z grupami i wykonaniami pojedynczych plików
  • jeszcze lepsze narzędzie do porównywania (bez problemów z białymi znakami lub nową linią)
  • adapter / wrapper do uruchamiania SimpleTests przez phpUnit i odwrotnie
  • kompatybilność PHP5.4 +

Wada:

  • nie jest standardem branżowym (PHPUnit)
  • nie jest aktywnie utrzymywany
Jens A. Koch
źródło
1
Nadal przydatne dla mnie i mojego szefa serwera php4 ^^ "
javier_domenech
Dzięki. Zaktualizowałem bazę kodu SimpleTest do pracy z nowszymi wersjami PHP, aw ciągu roku pojawią się kolejne poprawki. - PHP4 jest EOL od wieków i nie ma żadnych poprawek bezpieczeństwa. Nie używałbym go już w usługach zewnętrznych. Powinieneś przekonać swojego szefa, aby zezwolił na aktualizację do wersji co najmniej 5.5 lub lepszej v5.6: php.net/supported-versions.php#php-5.6
Jens A. Koch
Znam Jensa, dzięki za radę. Bardzo fajne rozwiązanie testowe
javier_domenech
1
=) Dziękuję za pokazanie mi repozytorium Github. Zacząłem się martwić „nie utrzymywanym kawałkiem”. Tylko powierzchownie, pamiętaj, ponieważ nadal robi wszystko, czego kiedykolwiek chciałem od prostego frameworka testowego z nowoczesnym kodem, z którym pracuję.
jeteon
SimpleTest ma o wiele większą elastyczność w konfigurowaniu zestawów testów, ponieważ możesz to wszystko zrobić w kodzie PHP. Masz więc do dyspozycji pełny język programowania, a nie tylko pliki konfiguracyjne xml i parametry terminala. PHPUnit może być bardziej obsługiwany przez narzędzia, ale mówi więcej o tym, jak społeczność PHP decyduje się na wycofywanie gorszych rzeczy.
still_dreaming_1
8

Zauważyłem, że konfiguracja SimpleTest jest jeszcze łatwiejsza niż PHPUnit. Po prostu go wyodrębnij i gotowe. Korzyścią jest to, że pracujesz na więcej niż jednej maszynie, ponieważ możesz przechowywać całą strukturę testową w taki sam sposób, jak kod źródłowy, a tym samym wiedzieć, że używasz tego samego kodu struktury. Zwłaszcza jeśli zmodyfikujesz go w jakikolwiek sposób.

Więc powiedziałbym, że zaletą SimpleTest jest to, że jest bardzo lekki i przenośny.

SimpleTest jest również dostarczany z bardzo prostym interfejsem graficznym HTML, który można łatwo rozszerzyć, jeśli chcesz. O ile wiem, PHPUnit nie zawiera GUI HTML, ale są dostępne do pobrania GUI, takie jak Cool .

Erik Öjebo
źródło
Ach, stary, przegłosowałem to całkowicie przez przypadek i nawet nie zdawałem sobie z tego sprawy aż do następnego dnia. Teraz mój głos jest zablokowany ... Przepraszam.
still_dreaming_1
8

Cóż, stworzyłem internetowy tester przypadków UI w phpUnit i udostępniłem go na sourceforge. Używa Ajaxa i ma całkiem fajny interfejs, jeśli chcesz go wypróbować, sprawdź to na sourceforge. Nazwa projektu to phpunitwebui, a strona internetowa to http://phpunitwebui.sourceforge.net/


źródło
4

Jak już wskazano, jest to głównie wybór preferencyjny, ponieważ obaj uruchomią testy, które dla niego napiszesz, i przedstawią wyniki.

Interfejs sieciowy Simpletest jest bardzo przydatny, ale czasami może być również uciążliwy. W moim obecnym projekcie musiałbym włożyć więcej pracy w system, aby moja aplikacja (API) działała z interfejsem internetowym (poprawnie skonfiguruj apache, skopiuj pliki do katalogu głównego public_html itp.), Niż byłoby to możliwe aby po prostu uruchomić phpunit z obszaru roboczego eclipse. Dlatego wybieram PHPUnit. Ponadto użycie PEAR było dużym plusem, ponieważ nie trzeba ręcznie śledzić aktualizacji. Po prostu uruchamiaj pear upgraderaz na jakiś czas, a PHPUnit będzie zawsze aktualne.

T0xicCode
źródło
Nie rozumiem tej analizy. Czy chcesz powiedzieć, że testujesz funkcjonalność przeglądarki za pomocą wtyczki eclipse dla phpunita, zamiast lokalnej konfiguracji Apache?
Kzqai
Nie, mówię, że w moim projekcie, ponieważ nie ma funkcji przeglądarki, używam phpunit przez eclipse.
T0xicCode
2

Z punktu widzenia bardzo przypadkowego programisty PHP:

Zrozumienie PHPUnit zajęło mi dwa dni, głównie próbując debugować pod Eclipse, z którego w końcu się poddałem.

Konfiguracja Simpletest, w tym debugowanie w Eclipse, zajęła mi dwie godziny.

Być może w przyszłości znajdę wady Simpletest, ale jak dotąd działa dobrze to, czego potrzebuję: TestClasses, Mock objects, debugowanie kodu testowego i interfejs sieciowy dla szybkiego migawki sytuacji.

Znowu: to z punktu widzenia bardzo zwykłego użytkownika PHP (nawet nie programisty :-)

tru7
źródło
1

Od jakiegoś czasu nie sprawdzałem Simple Test, ostatnio miałem wtyczkę Eclipse, co jest dla mnie głównym czynnikiem, ale od dawna nie była aktualizowana. Sebastian Bergmann nadal bardzo aktywnie pracuje nad PHPUnit, ale nadal brakuje mu dobrej wtyczki do zaćmienia - ale jest ona dołączona do nowego Zend Studio.

FrankS
źródło
1

To pytanie jest stare, ale chcę dodać moje doświadczenie: PHPUnit wydaje się być teraz standardem, ale jeśli pracujesz ze starszym systemem, który używa wielu, wielu zmiennych globalnych, możesz utknąć od samego początku. Wygląda na to, że nie ma dobrego sposobu na wykonanie testów z globalnymi zmiennymi w PHPUnit, wydaje się, że musisz ustawić swoje zmienne za pośrednictwem $ GLOBALS, co NIE jest DOBRE, jeśli masz mnóstwo plików ustawiających zmienne globalne wszędzie. OK, niektórzy mogą powiedzieć, że problem występuje w starszym systemie, ale to nie znaczy, że nie możemy przeprowadzić testów na takim systemie. Z SimpleTest takie rzeczy są proste. Przypuszczam, że gdyby PHPUnit pozwalało nam dołączyć plik globalnie, a nie w jakimkolwiek zakresie klas / funkcji, to również nie byłoby to zbyt dużym problemem.

Innym obiecującym rozwiązaniem jest http://www.enhance-php.com , ładnie wygląda :)

mr1031011
źródło
Zawsze używałem <phpunit backupGlobals="false">w config XML i nigdy nie miałem żadnych problemów z globalnymi w testach ...
Potherca
@ mr1031011 Twój link nie jest przydatny. Może chodziło Ci o ?: github.com/Enhance-PHP/Enhance-PHP
user12345
@Potherca powiedz mi o tym - początkowo miałem wiele problemów z globalnymi w starszym projekcie kodu i myślę, że wypróbowałem wszystkie adnotacje @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState global $xxxi wszystkie ich kombinacje, zanim spróbowałem --no-globals-backupi nagle zobaczyłem wszystkie działa zgodnie z oczekiwaniami. : D
conny
-2

Kiedy istnieją tysiące funkcji do przetestowania za jednym zamachem, phpunit jest do zrobienia, prosty test nie działa, ponieważ jest oparty na sieci.

Nadal używam prostej sieci do testów na małą skalę.

Ale oba są dobre

user5454174
źródło
SimpleTest nie jest oparty wyłącznie na sieci. Do tej pory używałem go wyłącznie z wiersza poleceń.
jeteon