phpunit 测试入门 [ 2.0 版本 ]
吐槽一下,phpunit官方手册真是照天书写的。网上教程也是都是含糊不清。直到发现了贝叶书的博客文章。本文大量借鉴了贝叶书的文章,如有兴趣,点击看原文
环境
1、本测试利用 composer
实现自动加载。
2、PHPunit 5.6 版本
安装phpunit
phpunit
安装方式官网有介绍,本文利用了composer
,安装自然也利用composer
局部安装
在你的项目文件夹中,执行composer require "phpunit/phpunit=5.6.*"
,就会自动安装 phpunit
了。局部安装会把phpunit
可执行文件放在项目文件夹的/vendor/bin
目录下。执行的时候必须输入路径指向该目录下的phpunit.bat
才能访问。
全局安装
如果你从未通过 Composer 安装过全局的扩展包,运行 composer global status
。你的窗口应该输出类似如下:
Changed current directory to <directory>
然后,将 <directory>/vendor/bin
增加到你的 PATH 环境变量中。现在, 我们可以在命令行中全局的使用 phpunit
命令了。(不会的自行百度环境变量)。
第一个测试
文件内容
项目结构
├──phpunit
├── composer.json
├── index.php
├── phpunit.xml
├── src
│ └── Book.php
└── tests
└── BookTest.php
配置composer.json
{
"autoload": {
"psr-4": {
"Src\\": "src/",
"Test\\": "test/"
}
}
}
然后执行composer install
更新自动加载。会自动生成vendor文件夹。
如果局部安装。composer.json
内容会是这样
{
"require": {
"phpunit/phpunit": "5.6.*"
},
"autoload": {
"psr-4": {
"Src\\": "src/",
"Test\\": "test/"
}
}
}
Book.php
内容
<?php
namespace Src;
class Book
{
private $book=array();
public function pushBook($bookId,$bookName)
{
if ($bookId && $bookName) {
$this->book[$bookId] = $bookName;
}
}
public function getBook($bookId)
{
return $this->book[$bookId];
}
}
BookTest.php
内容
<?php
namespace Test;
use PHPUnit\Framework\TestCase;
use Src\Book;
class BookTest extends TestCase
{
public function testgetBook()
{
$book = new Book;
$book->pushBook(1,"《三体》");
$this->assertEquals('《三体》',$book->getBook(1) );
}
}
执行测试
现在在test目录下执行测试。如果局部安装。命令行执行命令是../vendor/bin/phpunit BookTest
,因为需要找到phpunit可执行文件。如果全局安装命令是phpunit BookTest
。
现在执行,会出现报错信息。提示Src\Book
为找到。引入composer自动加载文件。在BookTest.php
添加require '../vendor/autoload.php';
导入composer生成的自动加载文件。再次运行。提示成功了。
每个测试文件都要require是很不方便的。PHPUnit提供了一个参数--bootstrap,可以使用项目的autoload文件。现在去掉测试中的require,使用phpunit --bootstrap ../vendor/autoload.php BookTest
来执行测试。提示成功。
虽然可以自动载入,但是要执行的命令更长了。我们还可以写一个配置文件来为项目指定bootstrap,这样就不用每次都写在命令里了。
在项目根目录的phpunit.xml
中添加。
<phpunit bootstrap="vendor/autoload.php">
</phpunit>
现在在项目根目录,注意,是项目根目录,执行phpunit test/BookTest
。如果要执行test目录下的所有测试,在项目根目录下执行:phpunit test
总结
至此,打开phpunit测试大门的钥匙大家就拿到手了,剩下的自由探索吧。
石头杨
最后登录:2021-01-23
在线时长:13小时6分
- 粉丝39
- 金钱325
- 威望120
- 积分1655
共 6 条评论
好文章,推荐
消灭人类暴政!
虽然我从来没用过phpunit但是偶然看到了就学习下吧!一直不懂项目的test目录是个什么鬼!只是知道是测试系统!
有没有代码覆盖率,怎么搞。我的一直提示 No code coverage driver is available
看了一天的phpunit,大致明白了一些,但是还是有些不清楚,其中也看了贝叶书的文章,以及http://blog.csdn.net/u011474028/article/details/55099705, 讲解还是不错的,找了半天没找着什么视频,好像视频资源有些匮乏,总之继续学习和探索吧
你好,请教个问题
我局部安装的phpunit 怎么在局部安装下执行test里面的测试文件啊
我执行phpunit test/测试名 之后
返回的为:cannot open file "test/测试名".
感谢教程我解决了问题了