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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。