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 根据正则表达式判断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)