PHPUnit 入门案例,phpunit入门案例
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. 完成。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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,

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

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: 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

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
