PHPUnit:dataProvider 在 PHPUnit_Framework_TestCase 的子 类 中不工作
PHPUnit: dataProvider not working in the sub classes of PHPUnit_Framework_TestCase
我在测试中使用从 PHPUnit_Framework_TestCase 扩展而来的 classes。 @dataProvider
似乎不适用于这些扩展的 classes.
这里只是一个简单的测试
namespace HH\Api\V10;
class StupidityTest extends TestCase
{
/**
* @dataProvider additionProvider
*/
public function testAdd($a, $b, $expected)
{
$this->assertEquals($expected, $a + $b);
}
public function additionProvider()
{
return [
[0, 0, 0],
[0, 1, 1],
];
}
}
phpunit returns 这个错误:
如果我使用 \PHPUnit_Framework_TestCase
而不是 TestCase
那么它工作正常。但它不适用于这些扩展的 classes:TestCase
& ApiTestCase
.
TestCase
class
namespace HH\Api\V10;
use HH\Api\ApiTestCase;
class TestCase extends ApiTestCase
{
}
ApiTestCase
class
namespace HH\Api;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Message\Response;
class ApiTestCase extends \PHPUnit_Framework_TestCase
{
protected $client = null;
public function __construct()
{
parent::__construct(); // <--have called parent constructor
$this->client = new Client([
'base_url' => $this->url(),
]);
}
....
}
任何帮助将不胜感激。谢谢
您应该使用 setUp
fixture 来设置 $client
终于弄明白为什么没有成功了。
子 class 的构造函数需要与父 class PHPUnit_Framework_TestCase
的相同。
class ApiTestCase extends \PHPUnit_Framework_TestCase
{
protected $client = null;
public function __construct($name = null, array $data = array(), $dataName = '')
{
parent::__construct($name, $data, $dataName);
...
}
...
}
但我发现更好的方法不是通过构造函数,而是使用固定装置。
public function setUp()
{
$this->client = new Client([
'base_url' => $this->url(),
]);
}
我在测试中使用从 PHPUnit_Framework_TestCase 扩展而来的 classes。 @dataProvider
似乎不适用于这些扩展的 classes.
这里只是一个简单的测试
namespace HH\Api\V10;
class StupidityTest extends TestCase
{
/**
* @dataProvider additionProvider
*/
public function testAdd($a, $b, $expected)
{
$this->assertEquals($expected, $a + $b);
}
public function additionProvider()
{
return [
[0, 0, 0],
[0, 1, 1],
];
}
}
phpunit returns 这个错误:
如果我使用 \PHPUnit_Framework_TestCase
而不是 TestCase
那么它工作正常。但它不适用于这些扩展的 classes:TestCase
& ApiTestCase
.
TestCase
class
namespace HH\Api\V10;
use HH\Api\ApiTestCase;
class TestCase extends ApiTestCase
{
}
ApiTestCase
class
namespace HH\Api;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Message\Response;
class ApiTestCase extends \PHPUnit_Framework_TestCase
{
protected $client = null;
public function __construct()
{
parent::__construct(); // <--have called parent constructor
$this->client = new Client([
'base_url' => $this->url(),
]);
}
....
}
任何帮助将不胜感激。谢谢
您应该使用 setUp
fixture 来设置 $client
终于弄明白为什么没有成功了。
子 class 的构造函数需要与父 class PHPUnit_Framework_TestCase
的相同。
class ApiTestCase extends \PHPUnit_Framework_TestCase
{
protected $client = null;
public function __construct($name = null, array $data = array(), $dataName = '')
{
parent::__construct($name, $data, $dataName);
...
}
...
}
但我发现更好的方法不是通过构造函数,而是使用固定装置。
public function setUp()
{
$this->client = new Client([
'base_url' => $this->url(),
]);
}