SimpleTest vs PHPunit

127

Je me demandais si quelqu'un ayant de l'expérience dans ces deux domaines peut faire la lumière sur la différence significative entre les deux, le cas échéant?

Une force spécifique de chacun qui le rend adapté à n'importe quel cas spécifique?

paan
la source
J'irais pour PHPUnit c'est beaucoup mieux
joao baptista
9
... et pourquoi? Essayez d'expliquer votre réponse, fournissez des ressources / liens / exemples.o
Manuel
<snark> Pourquoi pas les deux? </snark>
Agi Hammerthief

Réponses:

90

Cette question est assez datée, mais comme elle reçoit encore du trafic et des réponses, je pense que je répète mon point de vue ici même si je l'ai déjà fait sur d'autres questions (plus récentes).

Je suis vraiment déconcerté que SimpleTest soit toujours considéré comme une alternative à phpunit. Peut-être que je suis juste mal informé, mais d'après ce que j'ai vu:

  • PHPUnit est la norme; la plupart des frameworks l'utilisent (comme Zend Framework (1 & 2), Cake, Agavi, même Symfony abandonne son propre Framework dans Symfony 2 pour phpunit).
  • PHPUnit est intégré dans chaque IDE PHP (Eclipse, Netbeans, Zend Stuide, PHPStorm) et fonctionne très bien.
  • Simpletest a une extension eclipse pour PHP 5.1 (aka old) et rien d'autre.
  • PHPUnit fonctionne bien avec chaque serveur d'intégration continue car il génère tous les fichiers journaux standard pour la couverture du code et les rapports de test.
  • Simpletest ne le fait pas. Bien que ce ne soit pas un gros problème au départ, cela vous mordra énormément une fois que vous arrêterez de "juste tester" et que vous commencerez à développer un logiciel (Oui, cette déclaration est provocante :) Ne le prenez pas trop au sérieux).
  • PHPUnit est activement maintenu, stable et fonctionne très bien pour chaque base de code, chaque scénario et chaque façon dont vous souhaitez écrire vos tests.
  • (Subjective) PHPUnit fournit des rapports de couverture de code beaucoup plus agréables que Simpletest
  • Avec PHPUnit, vous obtenez également ces rapports dans votre IDE ( Netbeans , Eclipse, ...)
  • Il y a aussi quelques suggestions pour un web interface to phpunit tests.

Je n'ai encore vu aucun argument en faveur de SimpleTest. Ce n'est même pas plus simple à installer puisque PHPUnit est disponible via pear:

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

et le "premier test" est à peu près le même.

Depuis, PHPUnit 3.7il est encore plus facile de l'installer en utilisant simplement lePHAR Archive

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

ou pour Windows, téléchargez simplement le phar et exécutez:

php phpunit-.phar

ou lors de l'utilisation des méthodes d' installation de compositeur prises en charge, telles que

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

à votre composer.json.


Pour tout ce que vous voulez tester, PHPUnit aura une solution et vous pourrez trouver de l'aide à peu près n'importe où (SO, canal #phpunit irc sur freenode, à peu près tous les développeurs php;))

Veuillez me corriger si j'ai déclaré quelque chose de mal ou oublié quelque chose :)

Présentation des outils de test PHP

Vidéo: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

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

Il mentionne des trucs comme Atoum qui s'appelle lui-même: "Un framework de test unitaire simple, moderne et intuitif pour PHP!"


Divulgation complète

J'ai initialement écrit cette réponse en janvier 2011 où je n'avais aucune affiliation avec un projet de test PHP. Depuis, je suis devenu contributeur à PHPUnit.

édorien
la source
5
J'ai découvert que les tests Web de SimpleTest étaient beaucoup plus faciles à configurer et à exécuter que les tests Web de phpunit. Étant donné que c'est à peu près une nécessité avec php, c'est une victoire pour les petits et moyens projets, où vous voulez simplement lancer un cadre de test en un instant et l'important est de simples niveaux de tests. Par exemple, en excluant les tests Web, j'ai tendance à n'utiliser que la méthode assertTrue () dans Simpletest. Les tests Web, bien sûr, deviennent plus compliqués, mais ils ne doivent pas l'être trop.
Kzqai
1
"> Puisque c'est à peu près une nécessité avec php" - je ne suis pas du tout d'accord là-dessus. Je n'ai pas encore vu de projet php (ou framework) qui exécute ses tests via un navigateur. Cela crée beaucoup de problèmes sans aucun avantage. L'époque où le code php a été développé sur un système d'hébergement partagé utilisant la synchronisation ftp est révolue ( croisé les doigts ) et aucun projet, même petit, ne nécessite un serveur Web en cours d'exécution (au plus celui que php est livré). UNIT Tester via un navigateur et non le cli ou un IDE est un cas d'utilisation si rare que je ne pense pas que cela compte du tout.
édorien
13
Une bonne raison de considérer SimpleTest sur PHPUnit est que ce dernier est un outil de ligne de commande qui doit être installé sur le serveur exécutant les tests, ce qui est parfois beaucoup plus difficile que de simplement includeingérer les fichiers .PHP SimpleTest (comme d'autres l'ont expliqué.) Pour les programmeurs professionnels qui créent leur propre environnement de test, PHPUnit semble difficile à battre, mais si l'intégration d'un système de test dans une application open-source basée sur PHP où les «développeurs» de l'application peuvent être au mieux (ce que j'appelle) des «programmeurs professionnels», alors la simplicité de SimpleTest a un réel attrait, pour moi en tout cas. FWIW.
MikeSchinkel du
2
@MikeSchinkel Je ne pourrais pas être plus d'accord. Nous avons utilisé SimpleTest comme une solution de test intégrée basée sur un navigateur pour notre cadre d'application sur mesure. Il était toujours disponible et ne nécessitait aucune configuration d'installation au-delà d'un pull svn car il était inclus dans la source du framework. Nous sommes passés à PHPUnit pour l'intégration CIS. Parce que nous sommes une boutique Windows, PHPUnit peut être un cauchemar à installer et à configurer, et beaucoup de nos développeurs juniors brisent simplement l'environnement ou perdent la volonté de tester.
Gavin
1
Le lien vers les diapositives est rompu.
Dmitri Zaitsev
35

Je préfère PHPUnit maintenant, mais quand j'ai commencé, j'ai utilisé SimpleTest car je n'avais pas toujours accès à la ligne de commande. SimpleTest est bien, mais la seule chose qu'il a vraiment sur PHPUnit, à mon avis, c'est le web runner.

Les raisons pour lesquelles j'aime PHPUnit sont qu'il s'intègre à d'autres outils de développement PHP tels que phing (tout comme SimpleTest), phpUnderControl et Xinc . À partir de la version 3.0, il a un support moqueur , est activement développé et la documentation est excellente.

Vraiment, la seule façon de répondre à cette question par vous-même est d'essayer les deux pendant un certain temps et de voir ce qui correspond le mieux à votre style.

EDIT: Phing s'intègre désormais également à SimpleTest.

Eric Scrivner
la source
4
Juste une note, le site Web de phing dit qu'il prend en charge SimpleTest
philfreo
18
  • Je ne pouvais PAS comprendre comment télécharger et installer PHPUnit.
  • Je pourrais, cependant, comprendre facilement comment installer SimpleTest.

    (Pour autant que je me souvienne, les instructions pour PHPUnit disaient quelque chose du genre "installez-le via PEAR et nous ne donnerons aucune instruction sur la façon de le faire autrement") voir:

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

Pour SimpleTest , téléchargez-le et pointez-le à partir de votre code.

Donc Simpletest a gagné pour moi.

stfan
la source
4
Je suppose que la documentation a changé depuis que vous avez publié votre réponse. Aujourd'hui, vous tapez simplement 3 commandes et il sera installé, vous n'avez même pas à télécharger quoi que ce soit vous-même.
Anti Veeranna
5
Vous pouvez installer PHPUnit via PEAR, le télécharger manuellement ou extraire le dernier code de github. Il y a un lien clair vers les instructions d'installation sur la page d'accueil. SimpleTest ne me donne qu'une seule option, pointant vers sourceforge et c'est une myriade de publicités ...
Potherca
1
Sous Windows, PHPUnit est difficile à installer. J'ai dû l'installer sur 2 postes de travail. Le premier a duré 3 heures, avec l'aide du chanel PEAR IRC. Pour le second (même OS) je n'ai jamais réussi. Cela dit, sous Linux, c'est un charme.
FMaz008
1
SimpleTest +1 Facile à installer Facile à utiliser. PHPUnit est cependant plus puissant que le plus simple pour satisfaire mes besoins.
Cheung le
Les choses ont peut-être changé depuis '09, mais PHPUnit s'est installé en quelques secondes avec seulement quelques commandes sous Windows.
Chiffre du
13

La moitié des points mentionnés dans la réponse acceptée ne sont tout simplement pas vrais:

SimpleTest a

  • la configuration plus simple (extraire dans un dossier, inclure et exécuter)
  • vérifiez simplement le dossier dans le contrôle de version (essayez de le faire avec phpunit de nos jours :))
  • moins de dépendances et beaucoup d'extensions (webtester, formtester, auth)
  • un bon reporter de couverture de code, facile à étendre (points, noms de fonctions, couleurs)
  • un résumé de la couverture du code (finalement débarqué dans PHPUnit 4.x)
  • un coureur Web décent et un coureur Web ajax, avec des groupes et des exécutions de fichier unique
  • encore meilleur outil de comparaison (sans espace ni problème de nouvelle ligne)
  • un adaptateur / wrapper pour exécuter SimpleTests par phpUnit et vice versa
  • compatibilité PHP5.4 +

Le mauvais côté:

  • pas la norme de l'industrie (PHPUnit)
  • pas activement entretenu
Jens A. Koch
la source
1
Encore utile pour moi et mon serveur php4 patron ^^ "
javier_domenech
Merci. J'ai mis à niveau la base de code de SimpleTest pour qu'elle fonctionne avec les nouvelles versions de PHP et quelques modifications supplémentaires sont apportées au cours de l'année. - PHP4 est EOL depuis des lustres et ne reçoit aucun correctif de sécurité. Je ne l'utiliserais plus sur des services externes. Vous devriez convaincre votre patron d'autoriser une mise à jour vers au moins v5.5 ou mieux v5.6: php.net/supported-versions.php#php-5.6
Jens A. Koch
Je connais Jens, merci pour les conseils. Très belle solution de test à vous
javier_domenech
1
=) Merci de m'avoir montré le repo Github. J'avais commencé à m'inquiéter du "bit non maintenu". Seulement superficiellement, remarquez, car il fait toujours tout ce que j'ai toujours voulu d'un cadre de test simple avec le code moderne avec lequel je travaille.
jeteon
SimpleTest offre beaucoup plus de flexibilité dans la configuration de vos suites de tests, car vous pouvez tout faire en code php. Vous avez donc un langage de programmation complet à votre disposition, pas seulement des fichiers de configuration xml et des paramètres de terminal. PHPUnit est peut-être plus supporté par les outils, mais en dit plus sur la façon dont la communauté PHP continue de choisir de soutenir des choses inférieures.
still_dreaming_1
8

J'ai trouvé que SimpleTest était encore plus facile que PHPUnit à configurer. Extrayez-le et vous êtes prêt à partir. Un avantage de ceci est si vous travaillez sur plus d'une machine, puisque vous pouvez stocker l'ensemble du framework de test de la même manière que votre code source, et ainsi savoir que vous utilisez le même code de framework. Surtout si vous le modifiez de quelque manière que ce soit.

Donc, je dirais que l'un des points forts de SimpleTest est qu'il est très léger et portable.

SimpleTest est également livré avec une interface graphique HTML très simple, qui est assez facile à étendre si vous le souhaitez. Autant que je sache, PHPUnit n'inclut pas une interface graphique HTML, mais il existe des interfaces graphiques disponibles au téléchargement, telles que Cool .

Erik Öjebo
la source
Ah, mec, j'ai rejeté cela totalement par accident et je ne m'en suis même pas rendu compte avant le lendemain. Maintenant, mon vote est verrouillé ... Désolé.
still_dreaming_1
8

Eh bien, j'ai créé un exécuteur de cas de test d'interface utilisateur basé sur le Web phpUnit et je l'ai rendu disponible sur sourceforge. Utilise ajax et a une interface assez cool aussi si vous voulez essayer, vérifiez-le sur sourceforge. Le nom du projet est phpunitwebui et le site Web est http://phpunitwebui.sourceforge.net/


la source
4

Comme cela a été souligné, il s'agit principalement d'un choix de préférence, car les deux exécuteront les tests que vous écrivez pour lui et rendront compte des résultats.

L'interface utilisateur Web Simpletest est très utile, mais elle peut aussi parfois devenir lourde. Dans mon projet actuel, j'aurais dû mettre plus de travail dans un système pour faire fonctionner mon application (une API) avec l'interface Web (configurer correctement Apache, copier des fichiers à la racine public_html, etc.) qu'il ne l'aurait été. pour exécuter simplement phpunit depuis l'espace de travail eclipse. Par conséquent, je choisis PHPUnit. De plus, l'utilisation de PEAR était un gros plus puisque vous n'avez pas besoin de suivre manuellement les mises à jour. Exécutez simplement de pear upgradetemps en temps et PHPUnit sera tenu à jour.

T0xicCode
la source
Je n'ai pas cette analyse. Êtes-vous en train de dire que vous testez les fonctionnalités de type navigateur via le plugin eclipse pour phpunit, au lieu d'une configuration locale d'Apache?
Kzqai
Non, je dis que dans mon projet, comme il n'y a pas de fonctionnalité de type navigateur, j'utilise phpunit via eclipse.
T0xicCode
2

C'est du point de vue d'un développeur PHP très occasionnel:

Il m'a fallu deux jours pour comprendre PHPUnit, en essayant principalement de déboguer sous Eclipse que j'ai finalement abandonné.

Il m'a fallu deux heures pour configurer Simpletest, y compris le débogage sous Eclipse.

Peut-être que je trouverai les lacunes de Simpletest dans le futur, mais jusqu'à présent, il fait bien ce dont j'ai besoin: des classes de test, des objets Mock, un débogage de code de test et une interface Web pour un aperçu rapide de la situation.

Encore une fois: Ceci du point de vue d'un utilisateur PHP très occasionnel (pas même développeur :-)

tru7
la source
1

Je n'ai pas vérifié Simple Test depuis un moment, la dernière fois, il avait un plugin eclipse, ce qui est un facteur majeur pour moi, mais il n'a pas été mis à jour depuis longtemps. Sebastian Bergmann travaille toujours très activement sur PHPUnit, mais il lui manque toujours un bon plugin pour eclipse - mais il est inclus pour le nouveau Zend Studio.

FrankS
la source
1

Cette question est ancienne, mais je veux ajouter mon expérience: PHPUnit semble être la norme maintenant, mais si vous travaillez avec un système hérité qui utilise beaucoup de variables globales, vous risquez de rester bloqué dès le départ. Il semble qu'il n'y ait pas de bon moyen de faire des tests avec des variables globales dans PHPUnit, vous semblez devoir définir vos variables via $ GLOBALS, ce qui n'est PAS BON si vous avez des tonnes de fichiers définissant des variables globales partout. OK, certains peuvent dire que le problème est dans l'ancien système, mais cela ne signifie pas que nous ne pouvons pas faire de tests sur un tel système. Avec SimpleTest, une telle chose est simple. Je suppose que si PHPUnit nous permet d'inclure un fichier globalement, pas dans une portée de classe / fonction, ce ne serait pas trop un problème.

Une autre solution prometteuse est http://www.enhance-php.com , ça a l'air sympa :)

mr1031011
la source
J'ai toujours juste utilisé <phpunit backupGlobals="false">dans la configuration XML et je n'ai jamais eu de problèmes avec les globaux dans les tests ...
Potherca
@ mr1031011 votre lien ne va pas quelque part utile. Peut-être que vous vouliez dire?: Github.com/Enhance-PHP/Enhance-PHP
user12345
@Potherca m'en parle - j'ai initialement eu beaucoup de problèmes avec les globals dans un projet de code hérité, et je pense avoir essayé toutes les annotations @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState, global $xxxet toutes ses combinaisons, avant d'essayer --no-globals-backupet de tout voir soudainement fonctionne comme prévu. : D
conny
-2

quand il y a des milliers de fonctions à tester en une seule fois, phpunit est un chemin à parcourir, un simple test échoue car il est basé sur le Web.

J'utilise toujours le Web simple pour des tests à petite échelle.

Mais les deux sont bons

user5454174
la source
SimpleTest n'est pas purement basé sur le Web. Je l'ai utilisé exclusivement depuis la ligne de commande jusqu'à présent.
jeteon