1. 数据供给器
用来提供参数和结果,使用 @dataProvider 标注来指定使用哪个数据供给器方法。例如检测app升级数据是否符合预期,addProviderAppUpdateData()提供测试的参数和结果。testAppUpdateData()检测appUpdateData()返回的结果是否和给定的预期结果相等,即如果$appId='apple_3.3.2_117', $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' => ['bx7_3.3.5_120', ['status' => 0, 'isIOS' => false]],
'ios force update' => ['apple_3.3.2_117', ['status' => 1, 'isIOS' => true]],
'android soft update' => ['sanxing_3.3.2_117', ['status' => 2, 'isIOS' => false]],
'ios soft update' => ['apple_3.3.3_118', ['status' => 2, 'isIOS' => true]],
'android normal' => ['fhqd_3.3.6_121', ['status' => 1, 'isIOS' => false]],
'ios normal' => ['apple_3.3.5_120', ['status' => 1, 'isIOS' => true]],
'h5' => ['h5_3.3.3', ['status' => 1, 'isIOS' => false]]
];
}
}
断言成功结果:

2. 断言方法
常用有assertTrue(), assertFalse(), assertNull(), assertEquals(), assertThat()。
assertThat()自定义断言。常用的约束有isNull()、isTrue()、isFalse()、isInstanceOf();常用的组合约束logicalOr()、logicalAnd()。例如检测返回的结果是否是null或ApiApp类。
示例代码:
<?php
namespace Tests\Unit;
use App\Models\ApiApp;
use App\Services\SystemConfigService;
use Tests\TestCase;
class SystemConfigServiceTest extends TestCase
{
/**
* @dataProvider additionProviderGetLatestUpdateAppApi
*
* @param $appType
*/
public function testGetLatestUpdateAppApi($appType)
{
$result = SystemConfigService::getLatestUpdateAppApi($appType);
$this->assertThat($result, $this->logicalOr($this->isNull(), $this->isInstanceOf(ApiApp::class)));
}
public function additionProviderGetLatestUpdateAppApi()
{
return [
'apple' => [1],
'android' => [2],
'null' => [9999]
];
}
}
内容版权声明:除非注明,否则皆为本站原创文章。
