Jadual Kandungan
PHPUnit 入门案例,phpunit入门案例
Rumah php教程 php手册 PHPUnit 入门案例,phpunit入门案例

PHPUnit 入门案例,phpunit入门案例

Jun 13, 2016 am 08:44 AM
pembangunan projek

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

}
Salin selepas log masuk

生成的测试类文件:

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

}
Salin selepas log masuk

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

附执行结果:

"/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.
完成。
Salin selepas log masuk

  

 

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan untuk melaksanakan pembangunan modular dalam projek berskala besar Vue Panduan untuk melaksanakan pembangunan modular dalam projek berskala besar Vue Jun 09, 2023 pm 04:07 PM

Dalam pembangunan web moden, Vue, sebagai rangka kerja hadapan yang fleksibel, mudah digunakan dan berkuasa, digunakan secara meluas dalam pembangunan pelbagai tapak web dan aplikasi. Apabila membangunkan projek berskala besar, bagaimana untuk memudahkan kerumitan kod dan menjadikan projek lebih mudah untuk diselenggara adalah masalah yang mesti dihadapi oleh setiap pemaju. Pembangunan modular boleh membantu kami menyusun kod dengan lebih baik, meningkatkan kecekapan pembangunan dan kebolehbacaan kod. Di bawah, saya akan berkongsi beberapa pengalaman dan garis panduan untuk melaksanakan pembangunan modular dalam projek berskala besar Vue: 1. Pembahagian kerja yang jelas dalam projek berskala besar

Perkongsian kemahiran praktikal: pembangunan projek teknologi baharu Vue3+Django4 Perkongsian kemahiran praktikal: pembangunan projek teknologi baharu Vue3+Django4 Sep 10, 2023 pm 12:17 PM

Dalam beberapa tahun kebelakangan ini, teknologi bahagian hadapan telah berkembang pesat, dan Vue.js telah menarik banyak perhatian sebagai rangka kerja bahagian hadapan yang sangat baik. Dengan keluaran rasmi Vue.js3 dan ketibaan Django4 yang akan datang, menggabungkan kedua-duanya untuk membangunkan projek teknologi baharu sudah pasti merupakan penyelesaian yang baik yang boleh menembusi kesesakan teknikal dan meningkatkan kecekapan pembangunan projek. Artikel ini akan berkongsi beberapa petua praktikal untuk membantu pembangun menjadi lebih selesa dalam proses pembangunan projek teknologi Vue3+Django4. Pertama, kita perlu memulakan projek Vue3+Django4 baharu,

Bagaimana untuk memisahkan bahagian depan dan belakang projek pembangunan Java Bagaimana untuk memisahkan bahagian depan dan belakang projek pembangunan Java Nov 03, 2023 pm 12:59 PM

Cara Mengasingkan Bahagian Depan dan Belakang Projek Pembangunan Java Dengan perkembangan pesat Internet dan peningkatan berterusan pengalaman pengguna dalam aplikasi Web, model pembangunan memisahkan bahagian hadapan dan bahagian belakang secara beransur-ansur menjadi arus perdana. Dalam projek pembangunan Java, ia mempunyai pelbagai aplikasi. Jadi, bagaimana untuk memisahkan bahagian depan dan belakang projek pembangunan Java? Artikel ini akan menghuraikan penjelasan konsep, proses pembangunan, pemilihan teknologi, kelebihan dan cabaran, dsb. 1. Penjelasan konsep Pemisahan front-end dan back-end adalah kaedah pembangunan yang menggabungkan antara muka pengguna dan logik perniagaan.

Perangkap dipijak: Pengalaman dan pelajaran pembangunan projek bahasa Go Perangkap dipijak: Pengalaman dan pelajaran pembangunan projek bahasa Go Nov 03, 2023 am 08:14 AM

Perangkap yang telah dipijak: Pergi pengalaman pembangunan projek bahasa dan pelajaran Dalam pembangunan perisian, setiap pembangun pasti akan melangkah pada beberapa perangkap. Sudah tentu, ini tidak terkecuali untuk pembangun bahasa Go. Artikel ini akan berkongsi masalah yang saya hadapi semasa pembangunan projek menggunakan bahasa Go, dengan harapan dapat membawa pengalaman dan pengajaran kepada pembangun lain. Versi bahasa Go yang berbeza Apabila menggunakan bahasa Go untuk pembangunan projek, kita mesti memberi perhatian kepada versi bahasa Go. Mungkin terdapat beberapa perbezaan bahasa atau perubahan API antara versi yang berbeza ini

Kuasai teknologi teras: Ringkasan pengalaman pembangunan projek bahasa Go Kuasai teknologi teras: Ringkasan pengalaman pembangunan projek bahasa Go Nov 02, 2023 pm 02:55 PM

Kuasai teknologi teras: Ringkasan pengalaman pembangunan projek bahasa Go Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat industri Internet, pelbagai bahasa pengaturcaraan baharu telah muncul satu demi satu dan menjadi kegemaran baharu pembangun. Antaranya, bahasa Go, sebagai bahasa kompilasi statik sumber terbuka, disukai oleh banyak pembangun kerana kelebihannya seperti prestasi konkurensi yang baik dan kecekapan pelaksanaan yang tinggi. Sebagai pembangun bahasa Go, saya telah berlatih dalam berbilang projek dan mengumpul beberapa pengalaman serta ringkasan. Dalam artikel ini, saya akan berkongsi beberapa teknologi teras dan pengalaman tentang pembangunan projek bahasa Go, dengan harapan

Menembusi kesesakan: Ringkasan pengalaman pembangunan projek bahasa Go Menembusi kesesakan: Ringkasan pengalaman pembangunan projek bahasa Go Nov 02, 2023 pm 02:49 PM

Sebagai bahasa pengaturcaraan yang agak baru, bahasa Go telah mendapat lebih banyak perhatian dalam perkembangannya sejak beberapa tahun kebelakangan ini. Terutama dalam pembangunan projek, bahasa Go mempunyai kelebihan kerana ia lebih sesuai daripada bahasa lain untuk membangunkan sistem berprestasi tinggi, serentak dan teragih. Walau bagaimanapun, walaupun menggunakan bahasa Go, anda akan menghadapi kesesakan dan cabaran dalam pembangunan projek, jadi dalam artikel ini, kami akan berkongsi beberapa pengalaman untuk membantu mengatasi kesesakan ini. 1. Belajar dan kuasai bahasa Go: Sebelum memulakan pembangunan projek, anda mesti menguasai pengetahuan asas dan kemahiran pengaturcaraan bahasa Go terlebih dahulu.

Amalan pengaturcaraan templat Golang: gunakan templat untuk melengkapkan pembangunan projek Golang dengan cekap Amalan pengaturcaraan templat Golang: gunakan templat untuk melengkapkan pembangunan projek Golang dengan cekap Jan 20, 2024 am 08:21 AM

Amalan pengaturcaraan templat Golang: Untuk menggunakan templat dengan cekap untuk melengkapkan pembangunan projek di Golang, contoh kod khusus diperlukan Ringkasan: Dengan pembangunan berterusan Golang dalam bidang pembangunan perisian, semakin ramai pembangun mula memberi perhatian dan menggunakan Golang. untuk pembangunan projek. Di Golang, pengaturcaraan templat ialah teknologi yang sangat penting yang boleh membantu pembangun menyelesaikan pembangunan projek dengan cekap. Artikel ini akan memperkenalkan cara menggunakan templat untuk pembangunan projek di Golang dan memberikan contoh kod khusus. Pengenalan: Gola

Masalah dan penyelesaian biasa dalam pembangunan projek bahasa Go Masalah dan penyelesaian biasa dalam pembangunan projek bahasa Go Nov 03, 2023 pm 01:55 PM

Bahasa Go ialah bahasa pengaturcaraan berprestasi tinggi, ringkas dan mudah digunakan Semakin ramai pembangun mula memilihnya sebagai bahasa pilihan untuk pembangunan projek. Walau bagaimanapun, dalam proses pembangunan projek sebenar, kami juga akan menghadapi beberapa masalah biasa. Artikel ini akan memperkenalkan beberapa masalah ini dan menyediakan penyelesaian yang sepadan untuk membantu pembangun menangani cabaran ini dengan lebih baik. Soalan 1: Pengurusan pergantungan Dalam pembangunan projek bahasa Go, pengurusan pergantungan adalah masalah biasa. Disebabkan sifat modular bahasa Go, projek sering bergantung pada banyak pakej dan perpustakaan pihak ketiga. Dan jika

See all articles