phpunit的安装以及在PhpStorm中的使用
phpunit的安装以及在PhpStorm中的使用
单元测试这个词汇听起来很耳熟,很腻害的亚子,但是一直没有尝试过。经常听人家讲,一个项目有良好的单元测试代码,重构的勇气都大很多。摩拳擦掌,我们也来试试。
一、Windows下安装phpunit
1、PHP档案包(PHAR)
1)最简单的方法是在phpunit官网下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPUnit 所需要的所有必要组件(以及某些可选组件)捆绑在单个文件中。
2)根据自己的php版本选择对应的phpunit档案包版本。
3)下载后将下载文件放到任意的一个目录,我这里放到D:/phpunit目录下。
2、配置环境变量
将D:/phpunit配置到环境变量中
3、执行命令
注意这里下载的是什么版本,在命令中要把版本号带上比如这里的8.5.5 。比如这里,在D:/phpunit目录下输入:
echo @php "%~dp0phpunit-8.5.5.phar" %* > phpunit.cmd
回车之后,会生成一个phpunit.cmd的文件
4、检查是否安装成功
二、在phpstorm中配置使用phpunit
1.配置CLI Interpreters
2.Test Frameworks
3.配置单元测试的目录
4.运行
三、使用
因为前面已经在IDE中引入了.phar的文件,所以下面直接用就可以了
1、demo1
Money.php
1 <?php 2 class Money 3 { 4 private $amount; 5 public function __construct($amount) 6 { 7 $this->amount = $amount; 8 } 9 public function getAmount() 10 { 11 return $this->amount; 12 } 13 public function negate() 14 { 15 return new Money(-1*$this->amount); 16 } 17 }
MoneyTest.php:必须继承TestCase.php类
1 <?php 2 use PHPUnit\Framework\TestCase; 3 require_once "Money.php"; 4 class MoneyTest extends TestCase 5 { 6 public function testCanBeNegated() 7 { 8 $a = new Money(1); 9 $b = $a->negate(); 10 //var_dump($b); 11 $this->assertEquals(-1, $b->getAmount()); //判断输出是否和预期的相等 12 } 13 }
测试结果
2.demo2
将MoneyTest.php中assertEquals()方法中断言值改为-8,和预期的不一样试试
1 <?php 2 use PHPUnit\Framework\TestCase; 3 require_once "Money.php"; 4 class MoneyTest extends TestCase 5 { 6 public function testCanBeNegated() 7 { 8 $a = new Money(1); 9 $b = $a->negate(); 10 //var_dump($b); 11 $this->assertEquals(-8, $b->getAmount()); //判断输出是否和预期的相等 12 } 13 }
测试结果
更多的测试使用方法请看官网用例
2、PHPUnit 规定了一个测试类必须遵守如下的规定:
1)单元测试类名必须以 Test 结尾,
2)必须继承 \PHPUnit\Framework\TestCase 基类
上面的规定是必须遵守的,如果代码没有遵守规定 PHPUnit 不会把他当做单元测试代码。除了以上的两条,还有一些良好的编码习惯可以参考:
1)单元测试代码都放在 test 目录下。
2)每个单元测试类以被测试的类名开头。例如被测试类为 CalculateService,那么单元测试类应该为 CalculateServiceTest。
3)每个单元测试函数应该为被测试函数名结尾。例如被测试函数为 abs,那么单元测试函数应该为 testAbs。
根据上面的规范,编写
3、phpunit中常用的几个断言
一般常用测试无非就是 "断言",其实就是看看产生的结果是不是符合预期,如果是,那就证明,已经测试通过,否则,失败,说明逻辑处理,存在一定的差异,导致不符合预期。
AssertTrue/AssertFalse 断言是否为真值还是假
AssertEquals 判断输出是否和预期的相等
AssertGreaterThan 断言结果是否大于某个值,同样的也有LessThan(小于),GreaterThanOrEqual(大于等于),
LessThanOrEqual (小于等于).
AssertContains 判断输入是否包含指定的值
AssertType 判断是否属于指定类型
AssertNull 判断是否为空值
AssertFileExists 判断文件是否存在
AssertRegExp 根据正则表达式判断