Code前端首页关于Code前端联系我们

PHPUnit + Laravel 单元测试常用技巧

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

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]]
      ];
    }
  }

断言成功结果:

PHPUnit + Laravel单元测试常用技能

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)

PHPUnit + Laravel单元测试常用技能

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前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门