搜尋
首頁php教程php手册利用单元测试在每个层上对PHP代码进行检查(1)

利用单元测试在每个层上对PHP代码进行检查(1)

Jun 13, 2016 am 11:00 AM
phpweb程式碼使用單元應用程式測試

Web应用程序是24x7不间断运行的,因此我的程序是否还在运行这个问题会在晚上一直困扰我。单元测试已经帮我对自己的代码建立了足够的信心——这样我就可以安稳地睡个好觉了。

单元测试是一个为代码编写测试用例并自动运行这些测试的框架。测试驱动的开发是一种单元测试方法,其思想是应该首先编写测试程序,并验证这些测试可以发现错误,然后才开始编写需要通过这些测试的代码。当所有测试都通过时,我们开发的特性也就完成了。这些单元测试的价值是我们可以随时运行它们——在签入代码之前,重大修改之后,或者部署到正在运行的系统之后都可以。

PHP单元测试

对于PHP来说,单元测试框架是PHPUnit2。可以使用PEAR命令行作为一个PEAR模块来安装这个系统:% pear install PHPUnit2。

在安装这个框架之后,可以通过创建派生于PHPUnit2_Framework_TestCase的测试类来编写单元测试。

模块单元测试

我发现开始单元测试最好的地方是在应用程序的业务逻辑模块中。我使用了一个简单的例子:这是一个对两个数字进行求和的函数。为了开始测试,我们首先编写测试用例,如下所示。

清单1.TestAdd.php

<p><?php <br>require_once 'Add.php';<br>require_once 'PHPUnit2/Framework/TestCase.php';</p><p>class TestAdd extends PHPUnit2_Framework_TestCase<br>{<br>function test1() { $this->assertTrue( add( 1, 2 ) == 3 ); }<br>function test2() { $this->assertTrue( add( 1, 1 ) == 2 ); }<br>}<br>?></p>

这个TestAdd类有两个方法,都使用了test前缀。每个方法都定义了一个测试,这个测试可以与清单1一样简单,也可以十分复杂。在本例中,我们在第一个测试中只是简单地断定1加2等于3,在第二个测试中是1加1等于2。

PHPUnit2系统定义了assertTrue()方法,它用来测试参数中包含的条件值是否为真。然后,我们又编写了Add.php模块,最初让它产生错误的结果。

清单2.Add.php

<p><?php <br>function add( $a, $b ) { return 0; }<br>?></p>

现在运行单元测试时,这两个测试都会失败。

清单3.测试失败

<p>% phpunit TestAdd.php<br>PHPUnit 2.2.1 by Sebastian Bergmann.</p><p>FF</p><p>Time: 0.0031270980834961<br>There were 2 failures:<br>1) test1(TestAdd)<br>2) test2(TestAdd)</p><p>FAILURES!!!<br>Tests run: 2, Failures: 2, Errors: 0, Incomplete Tests: 0.</p>

现在我知道这两个测试都可以正常工作了。因此,可以修改add()函数来真正地做实际的事情了。

<p><?php <br>function add( $a, $b ) { return $a+$b; }<br>?></p>

现在这两个测试都可以通过了。

清单4.测试通过

<p>% phpunit TestAdd.php<br>PHPUnit 2.2.1 by Sebastian Bergmann.<br>..<br>Time: 0.0023679733276367<br>OK (2 tests)<br>%</p>

尽管这个测试驱动开发的例子非常简单,但是我们可以从中体会到它的思想。我们首先创建了测试用例,并且有足够多的代码让这个测试运行起来,不过结果是错误的。然后我们验证测试的确是失败的,接着实现了实际的代码使这个测试能够通过。

我发现在实现代码时我会一直不断地添加代码,直到拥有一个覆盖所有代码路径的完整测试为止。在本文的最后,您会看到有关编写什么测试和如何编写这些测试的一些建议。

1

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器