在 Codeception 2.3.* 中使用 dataProvider
Using dataProvider in Codeception 2.3.*
单元测试是用原生 PHPUnit 编写的,然后我们需要用验收和功能测试覆盖代码。因此修改了测试以与 Codeception 一起使用。一切正常,除了一件事 - Codeception 不理解原生 PHPUnit dataProviders。我尝试了 edno 的 @examples 和扩展,但它没有用。你有什么想法吗?
dataproviders 在代码接收方面有点不同,但也很好。
在您的 Cest 对象中添加一个 private/protected 方法(例如,我有一个 API 端点,它也排除了身份验证的版本:
/**
* @return array
*/
protected function tokenProvider()
{
return [
['name' => "x-client-token", 'value' => 'clientToken'],
['name' => "x-api-key", 'value' => 'apikey'],
];
}
在步骤 [1.] 中受保护方法的名称后面的名为 @dataprovider
的测试前面添加一个注释,并添加一个 Codeception 示例作为方法参数。 (命名空间 Codeception\Example
)
/**
* @dataprovider tokenProvider
*/
public function getArticleList(AcceptanceTester $I, Example $token)
现在,测试将调用 n 次,具体取决于步骤 [1.] 中数组中示例的数量
Edit/Update:
补充一点:数据提供者还有另一种方法。您可以在 doc 块中添加 @example
注释,以便将数据直接注入到 Example 对象中。注释可以是 json、php 数组语法或此处描述的键值对:https://codeception.com/docs/07-AdvancedUsage#Example-Annotation
/*
* @example {"name": "x-client-token", "value": "clientToken"}
* @example {"name": "x-api-key", "value": "apikey"}
*/
public function getArticleList(AcceptanceTester $I, Example $token)
{
// ...
}
单元测试是用原生 PHPUnit 编写的,然后我们需要用验收和功能测试覆盖代码。因此修改了测试以与 Codeception 一起使用。一切正常,除了一件事 - Codeception 不理解原生 PHPUnit dataProviders。我尝试了 edno 的 @examples 和扩展,但它没有用。你有什么想法吗?
dataproviders 在代码接收方面有点不同,但也很好。
在您的 Cest 对象中添加一个 private/protected 方法(例如,我有一个 API 端点,它也排除了身份验证的版本:
/** * @return array */ protected function tokenProvider() { return [ ['name' => "x-client-token", 'value' => 'clientToken'], ['name' => "x-api-key", 'value' => 'apikey'], ]; }
在步骤 [1.] 中受保护方法的名称后面的名为
@dataprovider
的测试前面添加一个注释,并添加一个 Codeception 示例作为方法参数。 (命名空间Codeception\Example
)/** * @dataprovider tokenProvider */ public function getArticleList(AcceptanceTester $I, Example $token)
现在,测试将调用 n 次,具体取决于步骤 [1.] 中数组中示例的数量
Edit/Update:
补充一点:数据提供者还有另一种方法。您可以在 doc 块中添加 @example
注释,以便将数据直接注入到 Example 对象中。注释可以是 json、php 数组语法或此处描述的键值对:https://codeception.com/docs/07-AdvancedUsage#Example-Annotation
/*
* @example {"name": "x-client-token", "value": "clientToken"}
* @example {"name": "x-api-key", "value": "apikey"}
*/
public function getArticleList(AcceptanceTester $I, Example $token)
{
// ...
}