Table des matières
PHPUnit 入门案例,phpunit入门案例
Maison développement back-end tutoriel php PHPUnit 入门案例,phpunit入门案例_PHP教程

PHPUnit 入门案例,phpunit入门案例_PHP教程

Jul 12, 2016 am 08:57 AM
项目开发

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;
    }

}
Copier après la connexion

生成的测试类文件:

<?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
        ];
    }

}
Copier après la connexion

这里需要注意,在我们执行“创建/更新测试”后生成的测试文件类与上面会有些不同,这里的测试用例是手动加上去的,这里具体实现可以查看手册里的说明!

附执行结果:

"/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.
完成。
Copier après la connexion

  

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1108859.htmlTechArticlePHPUnit 入门案例,phpunit入门案例 了解 PHPUnit 本案例是关于创建三角形的一个单元测试入门案例,在 netbeans 环境中完成,关于在此环境中搭...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Guide d'implémentation du développement modulaire dans les projets Vue à grande échelle Guide d'implémentation du développement modulaire dans les projets Vue à grande échelle Jun 09, 2023 pm 04:07 PM

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

Partage de compétences pratiques : développement de projets de nouvelles technologies Vue3+Django4 Partage de compétences pratiques : développement de projets de nouvelles technologies Vue3+Django4 Sep 10, 2023 pm 12:17 PM

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 d'un projet de développement Java Comment séparer le front-end et le back-end d'un projet de développement Java Nov 03, 2023 pm 12:59 PM

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 rencontrés : expérience et leçons de développement de projets linguistiques Go Pièges rencontrés : expérience et leçons de développement de projets linguistiques Go Nov 03, 2023 am 08:14 AM

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 Maîtriser la technologie de base : résumé de l'expérience de développement de projets en langage Go Nov 02, 2023 pm 02:55 PM

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

Briser le goulot d'étranglement : résumé de l'expérience de développement du projet de langage Go Briser le goulot d'étranglement : résumé de l'expérience de développement du projet de langage Go Nov 02, 2023 pm 02:49 PM

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.

Problèmes courants et solutions dans le développement de projets en langage Go Problèmes courants et solutions dans le développement de projets en langage Go Nov 03, 2023 pm 01:55 PM

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 : utilisez des modèles pour terminer efficacement le développement de projets Golang Pratique de programmation de modèles Golang : utilisez des modèles pour terminer efficacement le développement de projets Golang Jan 20, 2024 am 08:21 AM

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

See all articles