目次
PHPUnit 入门案例,phpunit入门案例
ホームページ php教程 php手册 PHPUnit 入门案例,phpunit入门案例

PHPUnit 入门案例,phpunit入门案例

Jun 13, 2016 am 08:44 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;
    }

}
ログイン後にコピー

生成的测试类文件:

<?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.
完成。
ログイン後にコピー

  

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue 大規模プロジェクトでモジュール開発を実装するためのガイド Vue 大規模プロジェクトでモジュール開発を実装するためのガイド Jun 09, 2023 pm 04:07 PM

現代の Web 開発では、Vue は柔軟で使いやすく強力なフロントエンド フレームワークとして、さまざまな Web サイトやアプリケーションの開発に広く使用されています。大規模なプロジェクトを開発する場合、コードの複雑さをどのように単純化し、プロジェクトの保守を容易にするかは、すべての開発者が直面しなければならない問題です。モジュール型開発は、コードをより適切に整理し、開発効率とコードの読みやすさを向上させるのに役立ちます。以下に、Vue 大規模プロジェクトでモジュール開発を実装するための経験とガイドラインをいくつか紹介します。 1. 大規模プロジェクトにおける明確な分業

実践スキル共有:Vue3+Django4新技術プロジェクト開発 実践スキル共有:Vue3+Django4新技術プロジェクト開発 Sep 10, 2023 pm 12:17 PM

近年、フロントエンド技術は急速に発展しており、優れたフロントエンドフレームワークとしてVue.jsが注目を集めています。 Vue.js3 の正式リリースと今後の Django4 の登場により、この 2 つを組み合わせて新しいテクノロジー プロジェクトを開発することは、技術的なボトルネックを突破し、プロジェクトの開発効率を向上させる優れたソリューションであることは間違いありません。この記事では、開発者が Vue3+Django4 テクノロジ プロジェクトの開発プロセスをより快適に行えるようになるための実践的なヒントをいくつか紹介します。まず、新しい Vue3+Django4 プロジェクトを開始する必要があります。

Java 開発プロジェクトのフロントエンドとバックエンドを分離する方法 Java 開発プロジェクトのフロントエンドとバックエンドを分離する方法 Nov 03, 2023 pm 12:59 PM

Java 開発プロジェクトのフロントエンドとバックエンドを分離する方法: インターネットの急速な発展と Web アプリケーションでのユーザー エクスペリエンスの継続的な向上に伴い、フロントエンドとバックエンドを分離する開発モデルが主流になりました。徐々に主流になっていきます。 Java 開発プロジェクトでは、幅広い用途に使用できます。では、Java 開発プロジェクトのフロントエンドとバックエンドをどのように分離すればよいでしょうか?この記事では、コンセプトの説明、開発プロセス、技術選定、メリットと課題などについて詳しく解説します。 1. 概念説明 フロントエンドとバックエンドの分離は、ユーザーインターフェースとビジネスロジックを組み合わせた開発手法です。

踏んだ落とし穴: Go 言語プロジェクト開発の経験と教訓 踏んだ落とし穴: Go 言語プロジェクト開発の経験と教訓 Nov 03, 2023 am 08:14 AM

踏まれた罠: Go 言語プロジェクト開発の経験と教訓 ソフトウェア開発の道では、すべての開発者は必ずいくつかの落とし穴を踏むことになります。もちろん、これは Go 言語開発者にとっても例外ではありません。この記事では、Go 言語を使用したプロジェクト開発中に私が遭遇した落とし穴を共有し、他の開発者に経験と教訓を提供したいと考えています。 Go 言語のバージョンの違い プロジェクト開発に Go 言語を使用する場合、Go 言語のバージョンに注意する必要があります。異なるバージョン間では言語の違いや API の変更が発生する可能性があります。

コア技術をマスターする:Go言語プロジェクト開発経験のまとめ コア技術をマスターする:Go言語プロジェクト開発経験のまとめ Nov 02, 2023 pm 02:55 PM

コア技術をマスターしよう:Go言語プロジェクト開発経験のまとめ 近年、インターネット業界の急速な発展に伴い、さまざまな新しいプログラミング言語が次々に登場し、開発者の新たなお気に入りとなっています。中でもGo言語は、オープンソースの静的コンパイル言語として、同時実行性能や実行効率の高さなどの利点から多くの開発者に愛されています。私は Go 言語開発者として、複数のプロジェクトで練習し、経験と要約を蓄積してきました。この記事では、Go 言語プロジェクト開発に関するいくつかのコアテクノロジーと経験を共有します。

ボトルネックの突破:Go言語プロジェクト開発の経験まとめ ボトルネックの突破:Go言語プロジェクト開発の経験まとめ Nov 02, 2023 pm 02:49 PM

比較的新しいプログラミング言語である Go 言語は、近年開発においてますます注目を集めています。特にプロジェクト開発では、Go 言語は他の言語よりも高性能、同時実行、分散システムの開発に適しているため、利点があります。ただし、Go 言語を使用していても、プロジェクト開発ではボトルネックや課題に遭遇することがあります。この記事では、これらのボトルネックを突破するために役立ついくつかの経験を共有します。 1. Go 言語を学びマスターする: プロジェクト開発を開始する前に、まず Go 言語の基本的な知識とプログラミング スキルをマスターする必要があります。

Golang テンプレート プログラミングの実践: テンプレートを使用して Golang プロジェクト開発を効率的に完了する Golang テンプレート プログラミングの実践: テンプレートを使用して Golang プロジェクト開発を効率的に完了する Jan 20, 2024 am 08:21 AM

Golang テンプレート プログラミングの実践: テンプレートを効率的に使用して Golang でプロジェクト開発を完了するには、特定のコード サンプルが必要です 概要: ソフトウェア開発分野での Golang の継続的な開発により、ますます多くの開発者が Golang に注目し、使用し始めていますプロジェクト開発のために。 Golang では、テンプレート プログラミングは、開発者がプロ​​ジェクト開発を効率的に完了するのに役立つ非常に重要なテクノロジです。この記事では、Golang でのプロジェクト開発にテンプレートを使用する方法と、具体的なコード例を紹介します。はじめに:ゴーラ

Go 言語プロジェクト開発における一般的な問題と解決策 Go 言語プロジェクト開発における一般的な問題と解決策 Nov 03, 2023 pm 01:55 PM

Go 言語は高性能でシンプルで使いやすいプログラミング言語であり、プロジェクト開発の優先言語として Go 言語を選択する開発者が増えています。ただし、実際のプロジェクト開発プロセスでは、いくつかの一般的な問題にも遭遇します。この記事では、これらの問題のいくつかを紹介し、開発者がこれらの課題にうまく対処できるように、対応する解決策を提供します。質問 1: 依存関係の管理 Go 言語プロジェクト開発では、依存関係の管理が一般的な問題になります。 Go 言語のモジュール的な性質により、プロジェクトは多くのサードパーティのパッケージやライブラリに依存することがよくあります。で、もし

See all articles