在进行项目开发的时候,经常会对我们的类,函数,http请求等进行测试,看结果是否符合我们的预期。 对于http 请求我们通常会使用postman 来进行测试。 那么如果我们需要测试某一个类,某一个方法,需要怎么办?
可能我们会这样做:在类或者方法调用后对结果进行打印,然后使用postman 去请求对应接口。
这样做有那些坏处呢:
- 可能会在你的代码中出现很多var_dump() 代码。
- 在你调用该类/方法 之前有很多步骤是你不需要的。(比如在调用之前对数据库进行了相关操作)。造成脏数据。
由于以上原因,我们想寻找一个简单并且高效的方法去对我们的类/方法进行测试,但是又苦于框架的单一入口原则。不能直接去调用对应的类。
Unit:
laravel 提供了非常优秀的测试基因:
默认情况,你的应用 tests 目录中包含两个子目录:Feature
和 Unit
。对应功能测试和单元测试。
功能测试是针对大面积代码进行的测试,包括多个对象之间的交互,甚至是对 JSON 端点的完整 HTTP 请求。
单元测试是针对你的代码中非常少,而且相对独立的一部分代码来进行的测试(方法)。实际上,大部分单元测试都是针对单个方法进行的。
创建一个测试用例
代码语言:javascript复制// 在 Feature 目录下创建一个测试类...
php artisan make:test UserTest
// 在 Unit 目录下创建一个测试类...
php artisan make:test UserTest --unit
代码语言:javascript复制<?php
namespace TestsUnit;
use PHPUnitFrameworkTestCase;
class ExampleTest extends TestCase
{
/**
* 一个基本的测试示例
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}
然后我们在终端运行 phpunit命令。
mac :
./vender/bin/phpunit
win:
cd vender/bin
phpunit
如果想要执行某一个文件,需要在命令后面加文件路径 如: ./vender/bin/phpunit tests/Unit/UserTest.php
单个方法:phpunit --filter=a_test_function
,
单个类:phpunit --class=ExampleTest