PHPUnit + Laravel 单元测试常用技巧
1.数据提供者
用于提供参数和结果。使用注释 @dataProvider 指定要使用的数据提供程序方法。例如,为了检查应用程序更新数据是否符合预期,addProviderAppUpdateData()函数提供测试参数和结果。 testAppUpdateData() 检查 appUpdateData() 返回的结果是否等于给定的预期结果,即 if $appId='', $result=['status' => 0, 'isIOS ' => false],则如果 $data 包含 ['status' => 0, 'isIOS' => false],则断言成功。 建议将数据提供者命名为字符串名称,这样如果断言失败,会打印失败的名称,更容易定位问题。
示例代码:
<?php
namespace Tests\Unit;
use App\Services\ClientService;
use Tests\TestCase;
class ClientServiceTest extends TestCase
{
/**
* @dataProvider addProviderAppUpdateData
*
* @param $appId
* @param $result
*/
public function testAppUpdateData($appId, $result)
{
$data = (new ClientService($appId))->appUpdateData();
$this->assertTrue(count(array_intersect_assoc($data, $result)) == count($result));
}
public function addProviderAppUpdateData()
{
return [
'null' => [null, ['status' => 0, 'isIOS' => false, 'latest_version' => 'V']],
'error app id' => ['sdas123123', ['status' => 0, 'isIOS' => false, 'latest_version' => 'V']],
'android force update' => ['', ['status' => 0, 'isIOS' => false]],
'ios force update' => ['', ['status' => 1, 'isIOS' => true]],
'android soft update' => ['', ['status' => 2, 'isIOS' => false]],
'ios soft update' => ['', ['status' => 2, 'isIOS' => true]],
'android normal' => ['', ['status' => 1, 'isIOS' => false]],
'ios normal' => ['', ['status' => 1, 'isIOS' => true]],
'h5' => ['', ['status' => 1, 'isIOS' => false]]
];
}
}断言成功结果:
![]()
2。常用的
断言方法包括assertTrue()、assertFalse()、assertNull()、assertEquals()、assertThat()。
assertTo() 自定义断言。常用的约束有isNull()、isTrue()、isFalse()、isInstanceOf();常用的组合约束有逻辑Or()、逻辑And()。例如判断返回结果是null还是ApiApp类。 ?例如,检查锁定设备后是否抛出错误代码3026。 ? setAccessible(true) 将方法设置为可访问,并使用 invokeArgs() 或 invoke() 调用该方法(invokeArgs 将参数作为数组传递)。例如,查明某个 IP 地址是否在白名单中。? ,使用setValue()设置属性值,使用getMethod()获取方法,setAccessible(true)设置可访问的属性和方法被用..例如,查找白名单路由。 ? 覆盖范围、功能和方法覆盖范围。可以查看当前单元测试覆盖的范围。例如,将WebDefenderTest代码的覆盖率写入桌面(phpunittests/unit/WebDefenderTest --coverage-html ~/Desktop/test)
![]()
6。指定代码覆盖率报告中包含哪些文件
在配置文件()白名单中,设置processUncoveredFilesFromWhitelist=true,使用标签设置目录,使用标签设置文件。例如,在 build.gradle 中包含 app/Services 和 app/Fascades/Services/ 中的所有文件。
示例代码:
<?xml version="" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="tests/"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Unit">
<directory suffix="">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app/Services</directory>
<file>./app/Facades/Services/</file>
</whitelist>
</filter>
<php>
<server name="APP_ENV" value="local"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="credis"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="APP_CONFIG_CACHE" value="bootstrap/cache/"/>
<server name="APP_SERVICES_CACHE" value="bootstrap/cache/"/>
<server name="APP_PACKAGES_CACHE" value="bootstrap/cache/"/>
<server name="APP_ROUTES_CACHE" value="bootstrap/cache/"/>
<server name="APP_EVENTS_CACHE" value="bootstrap/cache/"/>
</php>
</phpunit>7。参考文档
PHPUnit 官方文档
反射类
反射方法
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
