石头杨 2016-11-07 12:08:45 15160次浏览 6条评论 5 3 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测试大门的钥匙大家就拿到手了,剩下的自由探索吧。

觉得很赞
您需要登录后才可以评论。登录 | 立即注册