Zsu*_*sub 16 php phpunit unit-testing
我有一个测试类,其中一个测试通过a @dataProvider
和另一个测试@depends
在第一个方法上运行多次.然而,当我呼吁var_dump
应该传递给第二次测试时,它给了我一个坚实的NULL
,我没想到.
换句话说:这应该做什么:
<?php
class DevicesTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider registerDataProvider
*/
public function testRegister($device, $supposedResult)
{
//do a bunch of tests
return array($device, $supposedResult);
}
public function registerDataProvider()
{
return array(array("foo", "foo"));
}
/**
* @depends testRegister
*/
public function testSaveDevicePreferences($deviceArr)
{
$this->assertNotEmpty($deviceArr);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
Maj*_*jiy 17
在当前版本的PHPUnit(截至今天的5.4)中,它是可能的.
根据文件:
当测试从@dataProvider方法和@depends on的一个或多个测试接收输入时,来自数据提供者的参数将来自依赖测试的参数.来自依赖测试的参数对于每个数据集都是相同的.
这就是实际看起来的样子:
<?php
class DataProviderAndDependsCombinationTest extends AbstractUnittest{
public function dataProviderForSomething()
{
return array(
array(
'someProvidedValue',
'someOtherProvidedValue'
)
);
}
public function testToDependOn()
{
$this->assertTrue(true);
return 'someDependedValue';
}
/**
* @dataProvider dataProviderForSomething
* @depends testToDependOn
*/
public function testSomething($someProvidedValue, $someOtherProvidedValue, $someDependedValue)
{
$this->assertSame('someProvidedValue', $someProvidedValue);
$this->assertSame('someOtherProvidedValue', $someOtherProvidedValue);
$this->assertSame('someDependedValue', $someDependedValue);
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ess 10
@dataProvider
当您希望多次运行测试时,通常会使用不同的数据集.它的存在是为了避免您在测试中编写循环代码,并允许不同的数据集单独通过或失败.
正如我在评论中所说,我相信PHPUnit将使用@depends
或者 @dataProvider
,并且从您的示例中我的猜测是第二次胜出.另一种可能性是使用数据提供程序的测试不能用作依赖项,因为PHPUnit不知道要选择哪个测试加数据集.
由于registerDataProvider
返回单个数据集,您可以轻松地从测试本身调用它.这将允许@depends
在没有的第二次测试中工作@dataProvider
.假设testRegister
需要修改$device
和/或$supposedResult
,这应该工作:
class DevicesTest extends PHPUnit_Framework_TestCase {
public function testRegister() {
list($device, $supposedResult) = $this->registerDataProvider();
//do a bunch of tests
//register a device in the DB
return array($device, $supposedResult);
}
public function registerDataProvider() {
return array("foo", "foo");
}
/**
* @depends testRegister
*/
public function testSaveDevicePreferences($data) {
list($device, $supposedResult) = $data;
// do stuff dependent on testRegister()
$this->assertEquals($device, $supposedResult);
}
}
Run Code Online (Sandbox Code Playgroud)
如果第一次测试不需要修改这些变量,则只需registerDataProvider
从两个测试中调用即可.请注意,PHPUnit不会在测试时将返回的数组与依赖项分离为依赖测试的参数,如数据提供程序机制所做的那样.这是因为它不知道返回的数组是多个参数而不是单个参数.
归档时间: |
|
查看次数: |
10208 次 |
最近记录: |