Inhaltsverzeichnis
PHPUnit 入门案例,phpunit入门案例
Heim 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;
    }

}
Nach dem Login kopieren

生成的测试类文件:

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

}
Nach dem Login kopieren

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

附执行结果:

"/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.
完成。
Nach dem Login kopieren

  

 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Leitfaden zur Implementierung der modularen Entwicklung in Vue-Großprojekten Leitfaden zur Implementierung der modularen Entwicklung in Vue-Großprojekten Jun 09, 2023 pm 04:07 PM

In der modernen Webentwicklung wird Vue als flexibles, benutzerfreundliches und leistungsstarkes Frontend-Framework häufig bei der Entwicklung verschiedener Websites und Anwendungen eingesetzt. Bei der Entwicklung großer Projekte ist die Vereinfachung der Codekomplexität und die einfachere Wartung des Projekts ein Problem, mit dem sich jeder Entwickler auseinandersetzen muss. Die modulare Entwicklung kann uns helfen, Code besser zu organisieren, die Entwicklungseffizienz und die Lesbarkeit des Codes zu verbessern. Im Folgenden werde ich einige Erfahrungen und Richtlinien für die Implementierung der modularen Entwicklung in Vue-Großprojekten teilen: 1. Klare Arbeitsteilung in einem Großprojekt

Austausch praktischer Fähigkeiten: Entwicklung neuer Technologieprojekte für Vue3+Django4 Austausch praktischer Fähigkeiten: Entwicklung neuer Technologieprojekte für Vue3+Django4 Sep 10, 2023 pm 12:17 PM

In den letzten Jahren hat sich die Front-End-Technologie rasant weiterentwickelt und Vue.js hat als hervorragendes Front-End-Framework große Aufmerksamkeit auf sich gezogen. Mit der offiziellen Veröffentlichung von Vue.js3 und der bevorstehenden Einführung von Django4 ist die Kombination beider zur Entwicklung neuer Technologieprojekte zweifellos eine gute Lösung, die technische Engpässe überwinden und die Effizienz der Projektentwicklung verbessern kann. In diesem Artikel werden einige praktische Tipps gegeben, die Entwicklern helfen sollen, sich im Entwicklungsprozess von Vue3+Django4-Technologieprojekten besser zurechtzufinden. Zuerst müssen wir ein neues Vue3+Django4-Projekt starten,

So trennen Sie das Front-End und das Back-End eines Java-Entwicklungsprojekts So trennen Sie das Front-End und das Back-End eines Java-Entwicklungsprojekts Nov 03, 2023 pm 12:59 PM

So trennen Sie das Front-End und das Back-End von Java-Entwicklungsprojekten Mit der rasanten Entwicklung des Internets und der kontinuierlichen Verbesserung der Benutzererfahrung in Webanwendungen hat sich das Entwicklungsmodell der Trennung von Front-End und Back-End schrittweise weiterentwickelt zum Mainstream werden. In Java-Entwicklungsprojekten gibt es ein breites Anwendungsspektrum. Wie kann man also das Front-End und das Back-End von Java-Entwicklungsprojekten trennen? In diesem Artikel werden die Konzepterklärung, der Entwicklungsprozess, die Technologieauswahl, Vorteile und Herausforderungen usw. näher erläutert. 1. Konzepterklärung Die Trennung von Front-End und Back-End ist eine Entwicklungsmethode, die Benutzeroberfläche und Geschäftslogik kombiniert.

Auf die Fallstricke gestoßen: Go-Erfahrung und Unterricht in der Entwicklung von Sprachprojekten Auf die Fallstricke gestoßen: Go-Erfahrung und Unterricht in der Entwicklung von Sprachprojekten Nov 03, 2023 am 08:14 AM

Fallen, auf die man getreten ist: Erfahrungen und Lektionen bei der Entwicklung von Sprachprojekten Auf dem Weg der Softwareentwicklung wird jeder Entwickler unweigerlich auf einige Fallstricke stoßen. Dies ist natürlich keine Ausnahme für Go-Sprachentwickler. In diesem Artikel werden die Fallstricke erläutert, auf die ich bei der Projektentwicklung mit der Go-Sprache gestoßen bin, und ich hoffe, anderen Entwicklern einige Erfahrungen und Lehren zu vermitteln. Verschiedene Versionen der Go-Sprache Wenn wir die Go-Sprache für die Projektentwicklung verwenden, müssen wir auf die Version der Go-Sprache achten. Es kann zu einigen Sprachunterschieden oder API-Änderungen zwischen verschiedenen Versionen kommen

Beherrschen Sie die Kerntechnologie: Zusammenfassung der Erfahrungen bei der Entwicklung von Go-Sprachprojekten Beherrschen Sie die Kerntechnologie: Zusammenfassung der Erfahrungen bei der Entwicklung von Go-Sprachprojekten Nov 02, 2023 pm 02:55 PM

Beherrschen Sie die Kerntechnologie: Zusammenfassung der Erfahrungen bei der Entwicklung von Go-Sprachprojekten. Mit der rasanten Entwicklung der Internetbranche sind in den letzten Jahren nacheinander verschiedene neue Programmiersprachen entstanden und zum neuen Favoriten der Entwickler geworden. Unter anderem wird die Go-Sprache als statisch kompilierte Open-Source-Sprache von vielen Entwicklern wegen ihrer Vorteile wie guter Parallelitätsleistung und hoher Ausführungseffizienz geliebt. Als Go-Sprachentwickler habe ich in mehreren Projekten geübt und einige Erfahrungen und Zusammenfassungen gesammelt. In diesem Artikel werde ich einige Kerntechnologien und Erfahrungen zur Entwicklung von Go-Sprachprojekten teilen, in der Hoffnung, dies zu tun

Den Engpass überwinden: Erfahrungszusammenfassung der Go-Sprachprojektentwicklung Den Engpass überwinden: Erfahrungszusammenfassung der Go-Sprachprojektentwicklung Nov 02, 2023 pm 02:49 PM

Als relativ neue Programmiersprache hat die Go-Sprache in den letzten Jahren in ihrer Entwicklung immer mehr Aufmerksamkeit erhalten. Insbesondere in der Projektentwicklung bietet die Go-Sprache Vorteile, da sie sich besser als andere Sprachen für die Entwicklung leistungsstarker, gleichzeitiger und verteilter Systeme eignet. Doch selbst bei der Verwendung der Go-Sprache werden Sie bei der Projektentwicklung auf Engpässe und Herausforderungen stoßen. In diesem Artikel werden wir daher einige Erfahrungen teilen, die dabei helfen, diese Engpässe zu überwinden. 1. Lernen und beherrschen Sie die Go-Sprache: Bevor Sie mit der Projektentwicklung beginnen, müssen Sie zunächst die Grundkenntnisse und Programmierkenntnisse der Go-Sprache beherrschen.

Praxis der Golang-Vorlagenprogrammierung: Verwenden Sie Vorlagen, um die Golang-Projektentwicklung effizient abzuschließen Praxis der Golang-Vorlagenprogrammierung: Verwenden Sie Vorlagen, um die Golang-Projektentwicklung effizient abzuschließen Jan 20, 2024 am 08:21 AM

Golang-Template-Programmierpraxis: Um Vorlagen effizient zum Abschluss der Projektentwicklung in Golang zu nutzen, sind spezifische Codebeispiele erforderlich. Zusammenfassung: Mit der kontinuierlichen Weiterentwicklung von Golang im Bereich der Softwareentwicklung beginnen immer mehr Entwickler, Golang Aufmerksamkeit zu schenken und es zu verwenden für die Projektentwicklung. In Golang ist die Vorlagenprogrammierung eine sehr wichtige Technologie, die Entwicklern dabei helfen kann, die Projektentwicklung effizient abzuschließen. In diesem Artikel wird die Verwendung von Vorlagen für die Projektentwicklung in Golang vorgestellt und spezifische Codebeispiele bereitgestellt. Einleitung: Gola

Häufige Probleme und Lösungen bei der Entwicklung von Go-Sprachprojekten Häufige Probleme und Lösungen bei der Entwicklung von Go-Sprachprojekten Nov 03, 2023 pm 01:55 PM

Die Go-Sprache ist eine leistungsstarke, prägnante und benutzerfreundliche Programmiersprache. Immer mehr Entwickler wählen sie als bevorzugte Sprache für die Projektentwicklung. Im eigentlichen Projektentwicklungsprozess werden wir jedoch auch auf einige häufige Probleme stoßen. In diesem Artikel werden einige dieser Probleme vorgestellt und entsprechende Lösungen bereitgestellt, um Entwicklern dabei zu helfen, diese Herausforderungen besser zu bewältigen. Frage 1: Abhängigkeitsmanagement Bei der Entwicklung von Go-Sprachprojekten ist das Abhängigkeitsmanagement ein häufiges Problem. Aufgrund des modularen Charakters der Go-Sprache stützen sich Projekte oft auf viele Pakete und Bibliotheken von Drittanbietern. Und wenn

See all articles