在phpunit类

时间:2015-08-04 14:25:49

标签: php phpunit

我正在尝试编写一些测试,其中我使用config.php文件中的数据。这些文件位于同一文件夹中。 我知道我不能包含类内的文件,但我也不知道在我的phpunit测试类中使用这些精美数据的正确方法是什么。

这个课程看起来像这样:

<?php

require dirname(__FILE__).'/../../src/vendor/autoload.php';
$config = require "config.php";

use GuzzleHttp\Client;

echo $config['base_url']; //HERE I GET THE DATA

class ApiAdTest extends PHPUnit_Framework_TestCase
{--

    public function testApiAd_postAd()
    {
        $client = new Client(['base_uri' => --DATA FROM CONFIG.PHP--]);
        $response = $client->post(--DATA FROM CONFIG.PHP--, ['form_params' => [
          'name' => 'bellow content - guzzle testing',
          'description' => 'guzzle testing ad - demo'
          ]]);
        $code = $response->getStatusCode();
        $data = json_decode($response->getBody());
        $adId = $data->id;

        $this->assertEquals($code, 200);


        return $adId;
    }

在我的测试类中使用config.php中的这些数据的正确方法是什么?

更新: config.php内容:

<?php

return array(
    'base_url' => 'http://10.0.0.0/',
    'path' => 'api/ad/',
);

3 个答案:

答案 0 :(得分:1)

您可以在测试用例的setup方法中加载config.php文件并将值赋值给class属性,然后您可以在测试方法中使用如下:

<?php

require dirname(__FILE__).'/../../src/vendor/autoload.php';

use GuzzleHttp\Client;


class ApiAdTest extends PHPUnit_Framework_TestCase
{

    protected $config;

    protected function setUp()
    {
        $this->config = require("config.php");

    }


    public function testApiAd_postAd()
    {
        $client = new Client(['base_uri' =>$this->config['base_url'] ] );
        $response = $client->post($this->config['path'], ['form_params' => [
          'name' => 'bellow content - guzzle testing',
          'description' => 'guzzle testing ad - demo'
          ]]);
        $code = $response->getStatusCode();
        $data = json_decode($response->getBody());
        $adId = $data->id;

        $this->assertEquals($code, 200);


        return $adId;
    }

}

希望这个帮助

答案 1 :(得分:0)

如果您正在使用composer,我想用于设置配置的包名为PHP Dotenv

它在项目的根目录中使用Cookie ck = new Cookie("testCookie",""); 文件,并允许您将自己的设置添加到PHP的.env数组中。然后,您可以使用$_ENV在任何您希望使用它们的地方将它们拉出来。

然后,您可以将getenv()添加到.env文件中,这样就不会意外地将其提交给源代码管理。

答案 2 :(得分:0)

作为本机PHP解决方案,我建议使用composer的自动加载器来加载额外的配置文件。为此,您可以在files文件中定义composer.json数组,如下所示:

{
    "autoload": {
        "files": ["config.php"]
    }
}

然后在配置文件中,我将创建一个全局函数来访问配置变量:

<?php

function config($item) {
    $config = [
        // Config variables here
    ];

    return $config[$item];
}

运行composer dumpautoload后,您可以在应用程序中全局访问config()以获取配置项。

(您可能希望根据您的要求调整此解决方案,我更喜欢使用我以前的答案)

注意:如果您正在使用源代码管理,请不要提交config.php文件,因为这存在安全风险