我刚开始使用PHPUnit
。到目前为止,除了Data Provider
的问题外,一切都很完美。
问题是,当我运行测试时,它会通过。但如果我再次运行它,它就会失败,并显示以下错误:
ArgumentCountError: Too few arguments to function ValidationTest::testValidateType(), 0 passed and at least 3 expected
如果我对数据提供函数进行任何更改(例如更改要返回的数据,提供程序函数名称等),并重新运行,它会通过一次,并在所有连续测试运行中失败,出现上述错误。
我正在使用最新版本的PHPUnit(一个小时前更新)。不幸的是,我没有在任何地方找到具体的解决方案。所以,我真的很担心,我犯了非常愚蠢的错误吗?
不确定,但PHPUnit是否使用任何缓存机制来缓存提供程序数据?如果是,则是否有任何方法可以清除它(可能使用setUp或tearDown)?
期待看到专家意见。先感谢您。:-)
以下代码一次有效(通过一次):
/**
* @covers Validation
* @coversDefaultClass Validation
*/
class ValidationTest extends TestCase {
protected $validation;
protected function setUp() {
$this->validation = new Validation();
}
/**
* @covers ::validateType
* @dataProvider validateTypeProdiver
*/
public function testValidateType($assertion, $argument, $type) {
$result = $this->validation->validateType($argument, $type);
switch ($assertion) {
case 'True':
$this->assertTrue($result);
break;
}
}
public function validateTypeProdiver() {
return [
['True', 'file.txt', 'str']
];
}
}
以下代码始终有效(每次都通过):
/**
* @covers Validation
* @coversDefaultClass Validation
*/
class ValidationTest extends TestCase {
protected $validation;
protected function setUp() {
$this->validation = new Validation();
}
/**
* @covers ::validateType
*/
public function testValidateType() {
foreach ($this->validateTypeProdiver() as $args) {
$result = call_user_func_array([$this->validation, 'validateType'], array_slice($args, 1));
switch ($args[0]) {
case 'True':
$this->assertTrue($result);
break;
}
}
}
public function validateTypeProdiver() {
return [
['True', 'file.txt', 'str']
];
}
}
以下是配置信息:
<phpunit bootstrap="vendor/autoload.php" colors="true" verbose="true" beStrictAboutTestsThatDoNotTestAnything="true">
<testsuites>
<testsuite name="ProjectX Unit Test">
<directory suffix="Test.php">tests/ProjectX</directory>
<exclude>tests/ProjectX/assets</exclude>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src/ProjectX</directory>
<exclude>src/ProjectX/nodejs-commands</exclude>
</whitelist>
</filter>
<php>
<ini name="error_reporting" value="-1" />
</php>
</phpunit>
数据提供程序
文档下面找到了一个注释:“所有的数据提供程序都会在调用setUpBeforeClass
静态方法和第一次调用setUp
方法之前执行。因此,你不能从数据提供程序中访问任何你在那里创建的变量。这是为了让PHPUnit能够计算测试的总数所必需的。” 有什么提示吗? - A.N.M. Saiful Islam