使用composer安装phpunit
先初始化 composer
$ composer init
$ composer install
直接的安装是有问题的,因为可能不支持你的php版本,根据http://www.phpunit.cn/选择对应的phpunit版本,直接安装为7.1,在后面带上版本的参数
$ composer require --dev phpunit/phpunit ^6.2
Windows安装phpunit
如果你用了phpstorm,其实这一步并不是必须的,
但是我们有时候需要些一个phpunit.xml文件用命令去执行测试就有些麻烦了
在https://phar.phpunit.de/选择合适的版本
我把他们放在和php的同一目录下,因为我php的目录已经设置好了环境变量了
我的目录:C:\xampp\php在这个目录下打开cmd,输入下面这个命令
会创建一个cmd文件,运行phpunit
$ echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
然后我们在其他的目录用cmd运行phpunit --v
就可以知道有没有成功了
开始
http://www.phpunit.cn/manual/6.5/zh_cn/writing-tests-for-phpunit.html
先写一个简单的测试用例试试,目录结构:
├───src
│ └───Math.php
├───tests
│ └───MathTest.php
└───vendor
在composer中记得写上自动加载
"autoload": {
"psr-4": {
"Tests\\":"tests/",
"App\\":"src/"
}
}
<?php
namespace App;
class Math{
public function add($a,$b){
return $a+$b;
}
public function pow($a,$b){
return pow($a,$b);
}
}
<?php
namespace Tests;
use App\Math;
use PHPUnit\Framework\TestCase;
require_once __DIR__.'/../vendor/autoload.php';
class MathTest extends TestCase {
public function testAdd(){
$math=new Math();
$this->assertEquals($math->add(10,20),20);
}
public function testPow(){
$math=new Math();
$this->assertEquals($math->pow(2,2),4);
}
}
phpstrom测试
可以在phpstrom中调试,在左边会显示运行和调试的按钮
再随便改一下结果$this->assertEquals($math->add(10,20),20);
,因为返回的结果和20不等,所以再测试一下就报错了,而且还会提示出你错误的地方
还可以在目录,右键,也会有一个测试的按钮,我们就可以点这个来测试我们这个目录里面所有的测试用例了
phpunit命令测试
http://www.phpunit.cn/manual/6.5/zh_cn/textui.html
貌似有几种方法
//指定目录
$ phpunit test/
//指定测试文件
$ phpunit tests/MathTest.php
//指定方法
$ phpunit tests/MathTest.php --filter "/(::testAdd)( .*)?$/"
还可以在根目录写一个phpunit.xml文件,然后执行一次phpunit来测试我们的项目
http://www.phpunit.cn/manual/6.5/zh_cn/appendixes.configuration.html
各个的参数的意思大多可以再命令行那里找到
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.1/phpunit.xsd"
backupGlobals="true"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
cacheTokens="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
mapTestClassNameToCoveredClassName="false">
<testsuites>
<testsuite name="Test">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
大概摸索了一下,写成这样,能用,但是意思还是没多少明白的,还得继续学习....
文章评论