Question

Quelle est l'étendue, prise en charge, développé teste dans le monde PHP? Le pair avec Java? Là-haut avec Ruby / Rails? J'ai googlé et trouvé que les cadres existent mais je test me demande s'ils sont largement utilisés.

Faites le grand test ont intégré dans PHP IDE runners la façon dont les outils Java d'Eclipse faire ou outils Ruby / Rails de NetBeans faire? Est-ce test construit dans les frameworks MVC PHP comme avec Rails?

Je demande parce que un groupe où je travaille veut embaucher quelqu'un pour développer une application PHP pour eux. Je suis préoccupé par la qualité et de l'entretien que je pourrais être appelé à soutenir cette chose.

Était-ce utile?

La solution

Il y a au moins deux matures, autonomes, des suites de test de style JUnit disponibles, nommé PHPUnit et < a href = "http://www.simpletest.org/" rel = "noreferrer"> SimpleTest , respectivement.

En ce qui concerne les cadres MVC vont, Symfony a son propre cadre de test nommé chaux , CodeIgniter dispose d'une bibliothèque unit_test et CakePHP repose sur la SimpleTest ci-dessus.

Je sais que Zend Studio a un support intégré pour les tests PHPUnit, et les deux PHPUnit et SimpleTest ont des coureurs de ligne de commande si l'intégration dans tout flux de travail est possible.

si un développeur veut en tirer parti Les outils sont là dans le monde PHP, et les magasins intelligents font profiter d'eux.

Les mises en garde sont votre par les plaintes PHP bien sûr. Il y a deux communautés PHP; PHP en tant que plate-forme pour la création de logiciels et PHP comme un moyen d'interagir avec un serveur web, navigateur Web et base de données pour produire des choses comme l'application sur le web. Il est moins une chose en noir et blanc et plus un continuum; Parmi ceux qui sont plus sur les tests unitaires côté développeur de logiciels et TDD est pris en charge et utilisé autant qu'il est sur une autre plate-forme. Parmi les « concocter un tas de choses que je ne comprends pas, mais encore obtenir les résultats », il est du jamais vu.

Il y a beaucoup de l'héritage non-cadre /-cadre personnalisé code PHP dans c'est difficile d'obtenir un harnais de test utile autour. PHP se prête facilement à des modèles qui reposent sur l'existence d'un environnement de navigateur pour exécuter. Je n'ai aucune preuve pour étayer cette thèse autre que mes propres observations, mais beaucoup de magasins PHP qui se soucient de test finissent par se fondant sur des tests d'acceptation (c.-à-Sélénium) en remplacement de tests unitaires réel, test d'abord, etc. . le développement.

Dans votre situation, interview l'enfer du développeur votre groupe va embaucher.

  1. Demandez-leur ce cadre des tests unitaires qu'ils utilisent

  2. Demandez-leur de décrire, en termes généraux, un exemple du monde réel d'un temps ils ont développé une nouvelle fonctionnalité et ses tests de support

  3. Demandez-leur de décrire, en termes généraux, un exemple du monde réel d'un temps leurs tests ont échoué et ce qu'ils ont fait pour résoudre la situation

Vous êtes moins intéressé à la situation spécifique qu'ils vont décrire et plus intéressés par la façon dont l'aise, ils discutent de leur connaissance des tests de code en général.

Autres conseils

Chaque fois que je TDD un projet avec des outils de style XUnit, j'ai du mal à obtenir ma tête au bon endroit. Je trouve que l'utilisation des outils conçus pour le comportement Driven Development ou « Spécification par exemple » me rend plus facile pour < a href = "http://gojko.net/2010/12/02/the-principle-of-symmetric-change/" rel = "noreferrer"> faire TDD droit - à savoir l'accent sur la conception, l'exposition intention et décrivant le comportement dans des contextes spécifiques . Non test.

Cela dit, je voudrais vous présenter Pecs dans la conversation. De l'readme sur le site du projet.

  

Pecs est une petite bibliothèque de développement axé sur le comportement de PHP 5.3, à la RSpec ou JSpec.

Si vous avez utilisé JSpec ou mieux encore, Jasmine-BDD (pour JavaScript) le style PECS du comportement décrit doit être vraiment familier. Je trouve ce style grand pour les spécifications au niveau des composants. Si vous êtes à la recherche d'un outil de PHP pour les spécifications de niveau de fonction (histoires ou des tests d'acceptation des utilisateurs) considèrent Behati .

Pour en revenir à Pecs, voici un exemple tirée du site du projet PECS:

describe("Bowling", function() {
  it("should score 0 for a gutter game", function() {
    $bowling = new Bowling();
    for ($i=0; $i < 20; $i++) {
      $bowling->hit(0);
    }
    expect($bowling->score)->to_equal(0);
  });
});

Oui qui est une spécification de PHP. En regardant à travers la source de Pecs, il semble que l'auteur est en mesure de retirer ceci en tirant parti de la nouvelle hotness en PHP 5.3+, lambdas et fermetures. Donc je suppose que cela signifie que vous ne pouvez pas utiliser Pecs dans tout projet basé sur PHP <5.3 (juste FYI).

En outre, Pecs n'est pas aussi mature que PHPUnit ou SimpleTest. Cependant, je pense que les partisans de BDD dans la communauté PHP devraient soutenir la croissance des outils tels que Pecs qui encouragent « Spécification par exemple » ou BDD sans la confusion provoquée par avoir à utiliser anciens outils de test XUnit.

Ces jours-ci je travaille plus en Python que PHP. Cependant, la prochaine fois que je prends un projet PHP, je serai très heureux si j'ai une maturité, un outil communautaire comme soutenu Pecs pour élaborer les spécifications du logiciel.

J'ai eu une expérience incroyable avec Behati / Mink http://behat.org

Je suis d'accord avec les autres php comme plate-forme de tests unitaires ne sont pas un amusement ou de l'expérience BDD est la meilleure façon d'aller si vous utilisez un framework PHP

Envelopper ma tête compositeur comme outil de construction des pensions a été le plus grand bloc d'achoppement, mais nous avons pu utiliser Behati Mink Sélénium WebDriver pot autonome de serveur comme un outil de conception et de tests de régression incroyable. Nous avons utilisé pour exécuter notre suite de régression contre notre application CakePHP sur un serveur Jenkins, mais il est avéré être pas si « échec rapide » assez

Maintenant, notre flux de travail va comme ceci: Créer une histoire cornichon affiner l'histoire écrire des fonctionnalités et bouchonner defs toute nouvelle étape commencer à coder solution php pour tester Puis à la fin, nous avons une fonction de travail ou correction d'un bug avec un test de BDD couvrant

Configuration de VM Ubuntu Nous une avec un travail Behati configuration et copié à chaque poste de travail. Nous cuire au four dans notre processus. Nous venons de tirer vers le bas les changements commencent alors exécuter des tests de codage de nouvelles choses.

Nous avons écrit un script shell pour exécuter automatiquement mysql décharges et de les charger avant chaque fonction qui a fait refactorisation du code un jeu d'enfant.

La classe Mink WebAssert vous donne toutes les assertions dont vous avez besoin pour valider le comportement Les classes session ordinaire / de ContexteCommun sont parfaits pour l'utilisation ou XPath css.

Je l'ai utilisé Capybara / WebDriver avec Java et Rails projets avant et trouver la courbe en tête / apprentissage configuration est trop élevé par rapport à Behati.

En plus des bibliothèques / cadres que Alan a déjà mentionné, vous pouvez utiliser Apache mod_perl :: test, que je ce que je l'utilise comme un harnais. Il me permet d'intégrer très simplement des tests dans mon processus de libération. Le harnais utilise TAP sortie (Test Anything Protocol) pour déterminer si oui ou non les tests passent ou échouent , en utilisant les bibliothèques comme test :: simple ou test :: Plus ( Perl et < a href = "http://shiflett.org/code/test-more.php" rel = "nofollow noreferrer"> PHP ).

Hors de la boîte Apache :: test prend en charge l'écriture de tests dans les deux Perl et PHP. Dans mes propres projets, il a fallu un peu de supercherie et beaucoup de lire vraiment le faire fonctionner, mais une mise en œuvre de test :: Plus en PHP est intégré au harnais. Exécution de tous les tests écrits en PHP et Perl se fait par le biais d'une seule commande et toute défaillance le long du chemin est capturé Apache :: test, en notant le mieux possible ce qui a mal tourné.

La partie impressionnante de tout cela est que vous pouvez même utiliser PHPUnit ou simple test le long des deux frameworks de tests précédents. En exécutant des tests dans chaque bibliothèque respective, vous pouvez utiliser l'implémentation PHP de test :: Plus (ou même Perl par stdout de test) et recracher TAP pour votre harnais pour interpréter.

Assurez-vous de lire le Apache :: la documentation de test et le guide mod_perl Apache :: test en cours d'exécution . De plus, je trouve l'article ici une grande aide.

Par exemple rapide, vous pourriez installer un test en Perl en très peu de lignes de code qui se déroulera à travers toutes les pages de votre site (qui ont des liens) et de vérifier tous les résultats dans les réponses « 200 OK » et ne pas toute erreur d'analyse syntaxique:

#!perl

use strict;
use warnings;

use Apache::Test qw(:withtestmore);
use Apache::TestRequest;
use Test::More;
use Test::WWW::Mechanize;
use WWW::CheckSite::Validator;
use WWW::CheckSite::Spider;

plan 'no_plan';

my $config = Apache::Test::config();
my $host = "http://". Apache::TestRequest::hostport($config) || '';

my $s = WWW::CheckSite::Spider->new(
    uri => $host,
    ua_class => 'Test::WWW::Mechanize',
);
my $m = $s->current_agent;

while (my $page = $s->get_page) {
    is($m->status(), "200", $m->uri() ." retrieved successfully.");
    $m->content_lacks("Parse Error", $m->uri() ." does not contain syntax errors.");
}

Sur un projet passé, je l'ai utilisé le PHPUnit, et il m'a laissé vouloir. ligne PHPUnit + Commande déroulement des épreuves, fait en sorte que a passé trop de temps à coder les essais, n'a pas été assez vite, et semblait vraiment limiter le style du code d'une manière que je n'aimais pas (les objets étaient plus faciles à tester, il semblait un peu favoriser des objets).

Sélénium est une solution dont nous avons parlé, mais jamais eu le temps d'entrer dans le jeu, et je pense que nous aurions vraiment pu profiter de ce genre de test de niveau de sortie.

Sur ce dernier projet, le programmeur principal a adopté une approche de programmation plus fonctionnelle que nous avons révisons logiciel. Quand je l'ai mentionné que je voudrais code via TDD, il a fouetté une solution personnalisée en un jour ou moins que je considère avoir été aussi efficace pour moi d'utiliser comme PHPUnit. De plus, il m'a vraiment ouvert les yeux à la question de vs orientée objet programmation fonctionnelle.

Premier projet, a commencé à partir de zéro, dans au rez-de-chaussée, le codage orienté objet, un grand cadre de tests unitaires, il est devenu monolithique et embourbé rapidement. Deuxième projet, bien établi logiciel CMS avec une histoire de 5 ans et ancien code, mais un paradigme de programmation fonctionnelle et un cadre de test simple (nous utilisons fait en fait souvent assert php) fait obtenir plus simple au lieu de croître en complexité.

Le second projet, aussi, jamais arrivé au point de mettre en œuvre Sélénium (et je pense encore qu'il serait bénéfique), mais l'approche de la programmation fonctionnelle il est plus facile de traiter avec des tests en code.

Je viens de découvrir cette question et, alors que je suis encore au « stade des recherches » dans déterminer ce qui se passe. Je viens de découvrir quelque chose pour Ruby on Rails appelé "concombre" http://cukes.info/

Il est essentiellement « histoire du développement axée sur » Ruby et peut-être un étalon-or dans le domaine des tests fonctionnels, au moins autant que je l'ai vu dans mes voyages. (Je mets ce là publiquement, les experts peuvent me donc corriger si je me trompe)

A titre d'exemple de la langue dans le concombre, vous avez quelque chose qui ressemble à de très près SQL. et semble être encore plus lisible par l'homme. De la première page cukes leur langue ressemble à ceci:

 Scenario: Add two numbers
      Given I have entered 50 in the calculator
      And I have entered 70 in the calculator
      When I press add
      Then the result should be 120 on the screen

Le plus va compiler et exécuter comme un test.

Maintenant que tout est préambule du point de répondre à votre question sur PHP -. BDD et TDD

En écho aux commentaires ci-dessus, PHPUnit permettra les tests unitaires et d'après ce billet de blog: http://sebastian-bergmann.de/archives/738-Support-for-BDD-and-Stories-in-PHPUnit-3.3.html aussi soutient "style histoire" test BDD.

Pour développer la réponse ci-dessus par rapport à « simpletest » mentionné ci-dessus, le système ST a construit dans la classe d'objets du navigateur pour l'automatisation du navigateur, tandis que PHPUnit est une extension pour l'automatisation du navigateur SELENIUM http://seleniumhq.com (l'avantage de sélénium contre SimpleTest est que Selinium va exécuter un javascript sur la page en SimpleTest pas).

J'espère que vous trouverez ces informations utiles car il est le résultat d'un certain nombre de mois d'essai de recherche personnelle et pratique et d'erreur avec les technologies ci-dessus. S'il y a des experts là-bas qui peuvent clarifier et améliorer ma compréhension de ce qui précède, je salue les commentaires.

  • Alex.

Comparaison de Michael Booth de fonctionnalités de test BDD dans les deux langues:

http://mechanicalrobotfish.com / messages / 117-ruby-vs-php-bdd-concours de beauté-no-contest

conclut que les outils PHP BDD et la culture est sous-développé à ce stade.

Certes, il n'y a rien de comparable avec ce qui est disponible pour un programmeur Ruby, que ce soit en termes de connaissances (livres, vidéos, articles, messages de blog) ou des outils (Rspec, Shoulda, Factory Girl, Mocha, concombre).

Vous pouvez consulter PHPStorm . J'aime les coureurs de test qui utilisent PHPUnit à partir de l'IDE.

Maintenant, je suis élaboration d'un cadre "Spectrum" pour le test BDD: https://github.com/m -haritonov / spectre

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top