PHPUnit 入门案例,phpunit入门案例_PHP教程
PHPUnit 入门案例,phpunit入门案例
了解PHPUnit
本案例是关于创建三角形的一个单元测试入门案例,在netbeans环境中完成,关于在此环境中搭建phpunit这里不再描述,可以参考以下资料完成搭建工作:
http://www.cnblogs.com/x3d/p/phpunit-in-netbeans8.html
https://phpunit.de/manual/current/zh_cn/installation.html
https://github.com/sebastianbergmann/phpunit-skeleton-generator
原代码类:
<?php class Triangle { /** * 三条边 第一条边 * @var int */ protected $a; /** * 三条边 第二条边 * @var int */ protected $b; /** * 三条边 第三条边 * @var int */ protected $c; /** * 类型 * @var string */ protected $type; /** * 等边 */ const TYPE_EQUILATERAL = 'Equilateral'; /** * 等腰 */ const TYPE_ISOSCELES = 'Isosceles'; /** * 普通 */ const TYPE_ORDINARY = 'Ordinary'; public function __construct($a = 0, $b = 0, $c = 0) { $this->initSide($a, $b, $c); } /** * 初始化三边 * @param int $a * @param int $b * @param int $c */ protected function initSide(&$a = 0, &$b = 0, &$c = 0) { $this->a = intval($a); $this->b = intval($b); $this->c = intval($c); return $this; } /** * 组建 */ public function create($a, $b, $c) { return $this->initSide($a, $b, $c)->verifySideIsValid(); } /** * 获取类型 */ public function getType() { return $this->verifyType()->type; } /** * 验证三边是否有效 * @return boolean */ protected function verifySideIsValid() { if (intval($this->a) <= 0 || intval($this->b) <= 0 || intval($this->c) <= 0) { return false; } if ($this->a + $this->b <= $this->c) { return false; } if ($this->a + $this->c <= $this->b) { return false; } if ($this->b + $this->c <= $this->a) { return false; } if ($this->a - $this->b >= $this->c) { return false; } if ($this->a - $this->c >= $this->b) { return false; } if ($this->b - $this->c >= $this->a) { return false; } return true; } /** * 验证类型 */ protected function verifyType() { if ($this->isEquilateral()) { $this->type = self::TYPE_EQUILATERAL; return $this; } if ($this->isIsosceles()) { $this->type = self::TYPE_ISOSCELES; return $this; } $this->type = self::TYPE_ORDINARY; return $this; } /** * 是否为等边三角形 */ protected function isEquilateral() { return (($this->a == $this->b ) && ($this->b == $this->c)) ? true : false; } /** * 是否为等腰三角形 */ protected function isIsosceles() { return (($this->a == $this->b ) || ($this->b == $this->c) || ($this->a == $this->c)) ? true : false; } }
生成的测试类文件:
<?php /** * Generated by PHPUnit_SkeletonGenerator on 2016-03-13 at 19:49:12. */ class TriangleTest extends PHPUnit_Framework_TestCase { /** * @var Triangle */ protected $object; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. */ protected function setUp() { $this->object = new Triangle; } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. */ protected function tearDown() { } /** * @dataProvider addDataProvider * @covers Triangle::create * @todo Implement testCreate(). */ public function testCreate($a, $b, $c) { // Remove the following lines when you implement this test. /** $this->markTestIncomplete( 'This test has not been implemented yet.' ); * */ /* 实现代码 */ $this->assertTrue($this->object->create($a, $b, $c)); } /** * @covers Triangle::getType * @todo Implement testGetType(). */ public function testGetType() { // Remove the following lines when you implement this test. $this->markTestIncomplete( 'This test has not been implemented yet.' ); } /** * 测试用例 * @return array */ public function addDataProvider() { return [ [3, 4, 5], //yes [2, 2, 2], //yes [8, 10, 8], //yes [2, 3, 4], //yes [1, 2, 3], //no [5, 6, 7], //yes [8, 8, 15], //yes [0, 0, 0], //no [-10, 2, 5], //no [0, 2, 1], //no ]; } }
这里需要注意,在我们执行“创建/更新测试”后生成的测试文件类与上面会有些不同,这里的测试用例是手动加上去的,这里具体实现可以查看手册里的说明!
附执行结果:
"/usr/bin/php" "/usr/local/bin/phpunit" "--colors" "--log-junit" "/tmp/nb-phpunit-log.xml" "--bootstrap" "/var/www/html/phpunit/test/bootstrap.php" "/usr/local/netbeans-8.1/php/phpunit/NetBeansSuite.php" "--" "--run=/var/www/html/phpunit/test/core/triangleTest.php" PHPUnit 5.2.10 by Sebastian Bergmann and contributors. ....F..FFFI 11 / 11 (100%) Time: 105 ms, Memory: 10.50Mb There were 4 failures: 1) TriangleTest::testCreate with data set #4 (1, 2, 3) Failed asserting that false is true. /var/www/html/phpunit/test/core/triangleTest.php:47 2) TriangleTest::testCreate with data set #7 (0, 0, 0) Failed asserting that false is true. /var/www/html/phpunit/test/core/triangleTest.php:47 3) TriangleTest::testCreate with data set #8 (-10, 2, 5) Failed asserting that false is true. /var/www/html/phpunit/test/core/triangleTest.php:47 4) TriangleTest::testCreate with data set #9 (0, 2, 1) Failed asserting that false is true. /var/www/html/phpunit/test/core/triangleTest.php:47 FAILURES! Tests: 11, Assertions: 10, Failures: 4, Incomplete: 1. 完成。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans le développement Web moderne, Vue, en tant que framework frontal flexible, facile à utiliser et puissant, est largement utilisé dans le développement de divers sites Web et applications. Lors du développement de projets à grande échelle, comment simplifier la complexité du code et rendre le projet plus facile à maintenir est un problème auquel chaque développeur doit être confronté. Le développement modulaire peut nous aider à mieux organiser le code, à améliorer l'efficacité du développement et la lisibilité du code. Ci-dessous, je partagerai quelques expériences et lignes directrices pour la mise en œuvre du développement modulaire dans les projets Vue à grande échelle : 1. Division claire du travail dans un projet à grande échelle

Ces dernières années, la technologie front-end s'est développée rapidement et Vue.js a attiré beaucoup d'attention en tant qu'excellent framework front-end. Avec la sortie officielle de Vue.js3 et l'arrivée prochaine de Django4, combiner les deux pour développer de nouveaux projets technologiques est sans aucun doute une bonne solution qui peut briser les goulots d'étranglement techniques et améliorer l'efficacité du développement de projets. Cet article partagera quelques conseils pratiques pour aider les développeurs à se sentir plus à l'aise dans le processus de développement de projets technologiques Vue3+Django4. Tout d'abord, nous devons démarrer un nouveau projet Vue3+Django4,

Comment séparer le front-end et le back-end des projets de développement Java Avec le développement rapide d'Internet et l'amélioration continue de l'expérience des utilisateurs dans les applications Web, le modèle de développement consistant à séparer le front-end et le back-end s'est progressivement devenir courant. Dans les projets de développement Java, il dispose d'un large éventail d'applications. Alors, comment séparer le front-end et le back-end des projets de développement Java ? Cet article détaillera l'explication du concept, le processus de développement, la sélection technologique, les avantages et les défis, etc. 1. Explication du concept La séparation du front-end et du back-end est une méthode de développement qui combine l'interface utilisateur et la logique métier.

Pièges sur lesquels on a marché : Go expérience et leçons de développement de projets linguistiques Sur la route du développement de logiciels, chaque développeur tombera inévitablement sur certains pièges. Bien entendu, cela ne fait pas exception pour les développeurs du langage Go. Cet article partagera les pièges que j'ai rencontrés lors du développement de projets utilisant le langage Go, dans l'espoir d'apporter de l'expérience et des leçons à d'autres développeurs. Différentes versions du langage Go Lors de l'utilisation du langage Go pour le développement de projets, nous devons faire attention à la version du langage Go. Il peut y avoir des différences de langue ou des modifications d'API entre les différentes versions.

Maîtriser la technologie de base : résumé de l'expérience de développement de projets en langage Go Ces dernières années, avec le développement rapide de l'industrie Internet, divers nouveaux langages de programmation ont émergé les uns après les autres et sont devenus le nouveau favori des développeurs. Parmi eux, le langage Go, en tant que langage compilé statique open source, est apprécié par de nombreux développeurs pour ses avantages tels que de bonnes performances de concurrence et une efficacité d'exécution élevée. En tant que développeur du langage Go, j'ai pratiqué sur plusieurs projets et accumulé une certaine expérience et un résumé. Dans cet article, je partagerai quelques technologies et expériences de base sur le développement de projets de langage Go, dans l'espoir de

En tant que langage de programmation relativement nouveau, le langage Go a reçu de plus en plus d'attention dans son développement ces dernières années. En particulier dans le développement de projets, le langage Go présente des avantages car il est plus adapté que les autres langages au développement de systèmes hautes performances, simultanés et distribués. Cependant, même en utilisant le langage Go, vous rencontrerez des goulots d'étranglement et des défis dans le développement de projets. Dans cet article, nous partagerons donc quelques expériences pour vous aider à surmonter ces goulots d'étranglement. 1. Apprendre et maîtriser le langage Go : Avant de commencer le développement d'un projet, vous devez d'abord maîtriser les connaissances de base et les compétences en programmation du langage Go.

Le langage Go est un langage de programmation performant, concis et facile à utiliser. De plus en plus de développeurs commencent à le choisir comme langage préféré pour le développement de projets. Cependant, dans le processus de développement du projet, nous rencontrerons également certains problèmes courants. Cet article présentera certains de ces problèmes et fournira les solutions correspondantes pour aider les développeurs à mieux relever ces défis. Question 1 : Gestion des dépendances Dans le développement de projets en langage Go, la gestion des dépendances est un problème courant. En raison de la nature modulaire du langage Go, les projets s'appuient souvent sur de nombreux packages et bibliothèques tiers. Et si

Pratique de programmation de modèles Golang : pour utiliser efficacement les modèles pour terminer le développement de projets dans Golang, des exemples de code spécifiques sont nécessaires. Résumé : Avec le développement continu de Golang dans le domaine du développement de logiciels, de plus en plus de développeurs ont commencé à prêter attention et à utiliser Golang. pour le développement de projets. Dans Golang, la programmation de modèles est une technologie très importante qui peut aider les développeurs à mener à bien le développement de projets de manière efficace. Cet article expliquera comment utiliser des modèles pour le développement de projets dans Golang et fournira des exemples de code spécifiques. Introduction : Gola
