在 Codeception 2.3.* 中使用 dataProvider

Using dataProvider in Codeception 2.3.*

单元测试是用原生 PHPUnit 编写的,然后我们需要用验收和功能测试覆盖代码。因此修改了测试以与 Codeception 一起使用。一切正常,除了一件事 - Codeception 不理解原生 PHPUnit dataProviders。我尝试了 edno 的 @examples 和扩展,但它没有用。你有什么想法吗?

dataproviders 在代码接收方面有点不同,但也很好。

  1. 在您的 Cest 对象中添加一个 private/protected 方法(例如,我有一个 API 端点,它也排除了身份验证的版本:

    /**
     * @return array
     */
    protected function tokenProvider()
    {
        return [
            ['name' => "x-client-token", 'value' => 'clientToken'],
            ['name' => "x-api-key", 'value' => 'apikey'],
        ];
    }
    
  2. 在步骤 [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)
    { 
       // ... 
    }