在 入门 的基础上再来看这一篇。

1、使用注释 @test 来标注需要测试的方法

你的测试方法可以是 test 前缀的方法,也可以是包含 @test 注解的方法。

public function testSomething()
{$this->assertTrue(true, 'This should already work.');
}/*** @test*/
public function something()
{$this->assertTrue(true, 'This should already work.');
}
2、测试依赖 @depends

有一些测试方法需要依赖于另一个测试方法的返回值,此时需要使用测试依赖。测试依赖通过注释 @depends 来标记。

public function testReturnA()
{$this->assertTrue(true, 'This should already work.');return 1;
}public function testReturnB()
{$this->assertTrue(true, 'This should already work.');return 2;
}/*** @depends testReturnA* @depends testReturnB*/
public function testDepends($a, $b)
{$this->assertTrue(true, 'This should already work.');var_dump($a+$b);
}
3、数据提供器 @dataProvider

在依赖中,所依赖函数的返回值作为参数传入测试函数。除此之外,我们也可以用数据提供器来定义传入的数据。

/*** @dataProvider additionProvider*/
public function testAdd($a, $b, $expected)
{$this->assertSame($expected, $a + $b);
}public function additionProvider()
{return ['adding zeros' => [0, 0, 0], // 0 + 0 = 0 pass'zero plus one' => [0, 1, 1], // 0 + 1 = 1 pass'one plus zero' => [1, 0, 1], // 1 + 0 = 1 pass'one plus one' => [1, 1, 2], // 1 + 1 = 2 pass];
}
测试异常 (expectException)

就是看是否抛出意料之中的异常。需要在测试方法的开始处声明期望,然后执行语句。而不是调用后再声明。

public function testException()
{$this->expectException(\Exception::class);throw new \Exception('test');
}
测试输出

直接添加期望输出,然后执行相关函数。和测试异常类似,需要先添加期望,再执行代码。

public function testExpectFooActualFoo()
{$this->expectOutputString('foo');print 'foo';
}public function testExpectBarActualBaz()
{$this->expectOutputString('bar');print 'baz';
}
基镜

在编写测试时,最费时的部分之一是编写代码来将整个场景设置成某个已知的状态,并在测试结束后将其复原到初始状态。这个已知的状态称为测试的基境(fixture)。

例如在User测试中,我们每次都需要new User进行测试user类,其实我们完全可以使用基镜。

 protected $user;function setUp(){parent::setUp(); // TODO: Change the autogenerated stub$this->user = new User();//例如这个类有很多属性需要自定义,初始化,都可以在这里完成//例如这个类需要查找数据库进行赋值,都可以在这里完成//例如需要新增一条数据用于测试,都可以在这里完成}function tearDown(){parent::tearDown(); // TODO: Change the autogenerated stubunset($this->user);//销毁类属性,都可以在这里调用//例如测试完需要把数据还原回之前的状态,可以在这里完成//例如测试完需要把数据删除,可以在这里完成}public function testGet(){$user = $this->user;$data=  $user->get(1);$this->assertEquals('1',$data['id']);//断言返回的id为1}
继承

phpunit的测试用例都可以直接继承,进行多继承测试。

BaseTest extends TestCase
BTest extends BaseTest于是 BTest 和 BaseTest 都是测试文件。
有风险的测试 (Risky Tests)
无用测试 (Useless Tests)

默认情况下,如果你的测试函数没有添加预期或者断言,就会被认为是无用测试。

通过设置 --dont-report-useless-tests 命令行参数,或者在 xml 配置文件中配置 beStrictAboutTestsThatDoNotTestAnything="false"来更改这一默认行为。

测试过程中有输出 (Output During Test Execution)

如果在测试过程中输出文本,则会被认定为有风险的测试。通过设置 --disallow-test-output 命令行参数,或者在 xml 配置文件中配置 beStrictAboutOutputDuringTests="true" 来更改这一默认行为。

待完善的测试

处于一些原因,我们希望跳过或者对某些测试方法标记未待完善,使用 $this->markTestIncomplete 标记待完善的测试

public function testSomething()
{$this->assertTrue(true, 'This should already work.');$this->markTestIncomplete('This test has not been implemented yet.');
}

跳过的测试

使用 markTestSkipped 来标记跳过的测试。

use PHPUnit\Framework\TestCase;class DatabaseTest extends TestCase
{protected function setUp(){if (!extension_loaded('mysqli')) {$this->markTestSkipped('The MySQLi extension is not available.');}}public function testConnection(){// ...}
}
关于编辑器集成 PHPUnit

PHPStorm 自然是很智能的检测你的本地环境是否安装了 PHPUnit ,以及当前项目的 phpunit.xml 文件。

但是 vscode 就不会自动识别了,有兴趣的同学可以研究一下,不过我还是习惯在命令行操作。

PHP单元测试框架 PHPUnit 提高相关推荐

  1. PHP单元测试框架PHPUnit的使用方法

    以前在学习IOS开发时有专门写过Objective-C的单元测试的文章,IOS开发学习之单元测试,今天再总结下怎么在PHP中使用单元测试. 一.前言 在这篇文章中,我们使用 composer 的依赖包 ...

  2. PHP单元测试框架PHPUnit的使用

    以前在学习IOS开发时有专门写过Objective-C的单元测试的文章,IOS开发学习之单元测试,今天再总结下怎么在PHP中使用单元测试. 一.前言 在这篇文章中,我们使用 composer 的依赖包 ...

  3. μCUnit,微控制器的单元测试框架

    在MCU on Eclipse网站上看到Erich Styger在8月26日发布的博文,一篇关于微控制器单元测试的文章,有很高的参考价值,特将其翻译过来以备学习.原文网址:https://mcuone ...

  4. 【Python】单元测试框架unitest及其高级应用

    Unittest Unittest是python的一个单元测试框架,但是它不仅适用于单元测试,还适用自动化测试用例的开发与执行.我们可以很方便的使用它组织执行测试用例,使用它提供的丰富的断言方法进行测 ...

  5. python单元测试框架作用_Python自动单元测试框架

    简介: 软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作.既然如此,为什么不让程序员 ...

  6. Python自动单元测试框架

    软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作.既然如此,为什么不让程序员在编写软 ...

  7. 玩转Google开源C++单元测试框架

    玩转Google开源C++单元测试框架Google Test系列(gtest)(总) 前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错. 我 ...

  8. node.js测试html tdd,nodejs的单元测试框架mocha

    # nodejs的单元测试框架mocha 当我们编写比较复杂的项目时,需要对项目的测试用例进行长期跟踪,对单元模块进行质量控制,对开发成果进行自我检验,那么需要一个好用的工具,自学了一下mocha,这 ...

  9. python语言案例教程单元测试答案_Python单元测试框架(附例子)

    什么是单元测试? 单元测试在[Python中做是为了在应用程序的开发阶段的早期识别错误时的错误不太经常和修复成本更低. 单元测试是用Python设计的脚本化代码级测试,用于验证功能的小"单元 ...

最新文章

  1. iOS new 和 alloc的区别
  2. 第一次运行Spring Boot有感
  3. SpringBoot的全局异常处理的优雅吃法!要进来学习下吗
  4. 协同滤波模型的推荐算法(ACM暑校-案例学习)
  5. springboot项目中一个实体类引用其它实体类的字段并显示到页面上
  6. asp.net日期显示 问题
  7. eclipse下使用git插件上传代码至github
  8. 初一模拟赛总结(2019.6.15)
  9. threadlocal线程_线程故事:Web应用程序中的ThreadLocal
  10. 【安利向】入坑半年的GPU云平台,三分钟训练起飞!xiu~
  11. 不适合的研究生,分流!不适合的导师,退出!
  12. Lesson3.2 variables
  13. mysql主从复制周期_Mysql主从复制
  14. My Thirty-sixth - 合并二叉树 - By Nicolas
  15. 如何在Google表格中直接使用Google翻译
  16. html日历页面节假日_js css+html实现简单的日历
  17. 一文详尽解释CatBoost
  18. 解决问题:使用cv2.imshow/plt.imshow显示图片正常,但保存下来的图片不正常或者全黑
  19. java 电话号码 打号_java电话号码怎么匹配?
  20. HS光流法及其代码示例

热门文章

  1. Boost库网络编程
  2. 算法之美 | 位运算的巧妙奥秘(一) | JAVA中位运算的深入浅出
  3. Ansoft SIMPLORER 6.0 (多领域仿真软件)\
  4. 1、Ansoft HFSS 入门简述
  5. 交互式系统中的调度:轮转调度,优先级调度,多级队列,最短进程优先,保证调度,彩票调度。批处理系统中的调度:先进先出,最短作业优先,最短剩余时间优先。陈向群书上的概念
  6. 保护光盘数据的八种加密方法
  7. linux网卡驱动重装操作
  8. 百度凤巢新版结构导图
  9. 重新安装ODBC 驱动程序方法之一
  10. iOS学习的比较好的博客地址