2013-09-25 2 views
0

Je suis nouveau à la fois TDD et phpunit.test PHP_SAPI! = Code 'cli' avec phpunit

Je teste le code qui bifurque basée sur sa méthode d'exécution:

if (PHP_SAPI!='cli') { 
    header('HTTP/1.1 '.$statusCode); 
} 

Je veux obtenir autant de couverture de code possible, mais je ne peux pas sembler tester cette partie (parce que PHPUnit est le test via l'interface de ligne de commande).

Y a-t-il un moyen de contourner cela? Ou une autre façon de tester cette partie?

Je pensais essayer de boucler ou quelque chose, mais où les tests se dérouleront par rapport au système de l'utilisateur qui le teste.

+1

Vous effectivement trouvé une odeur de code. Au lieu de cela, vous devriez avoir ceci comme un paramètre injecté pour ce code * ou * deux implémentations, une pour CLI et une pour HTTP afin que vous puissiez tester les deux unités. Si ce n'est pas votre code, vous n'avez pas besoin de le tester. – hakre

+0

BTW, si vous voulez faire TDD (écrire le test avant d'écrire le code), vous ne rencontrerez pas ce problème en premier lieu. En guise de note supplémentaire et pour rendre le terme TDD un peu plus clair, je ne juge pas, il m'a fallu beaucoup de temps aussi jusqu'à ce que je comprenne l'avantage d'écrire des tests en premier. – hakre

Répondre

0

Résumé cette comparaison dans sa propre méthode. Mock cette méthode dans votre test pour contrôler si oui ou non il entre dans ce bloc.

if ($this->_isCli()) { 
    header('HTTP/1.1 '.$statusCode); 
} 

protected function _isCli() { 
    return PHP_SAPI!='cli'; 
} 
0

Si vous utilisez le package Mockery, vous ne pouvez pas simuler les méthodes protégées. Voici le commentaire de l'un des développeurs ->Calling a mocked protected method

Mais vous pouvez toujours créer un test valide si vous utilisez php_sapi_name fonction native

Ensuite, vous pouvez soit créer une fonction fictive avec le même nom dans votre test (à l'intérieur du même espace de noms) pour renvoyer n'importe quelle valeur.

ou

utiliser une extension de PHPUnit pour se moquer des fonctions statiques et natives ->phpunit-mockfunction