gpt4 book ai didi

phpunit - mock 会影响你的断言计数吗?

转载 作者:行者123 更新时间:2023-12-04 14:18:42 35 4
gpt4 key购买 nike

我注意到当我使用模拟对象时,PHPUnit 会正确报告执行的测试数量,但错误地报告我所做的断言数量。事实上,每次我 mock 它都算作另一个断言。一个包含 6 个测试、7 个断言语句和每个测试模拟的测试文件一次报告了 6 个测试、13 个断言。

这是测试文件,除了一个测试之外的所有测试都被删除了(为了说明这里),另外我引入了另一个测试,它不会跟踪这个问题。 PHPUnit 报告 2 个测试,3 个断言。我删除了假人:1 个测试,2 个断言。

require_once '..\src\AntProxy.php';

class AntProxyTest extends PHPUnit_Framework_TestCase {
const sample_client_id = '495d179b94879240799f69e9fc868234';
const timezone = 'Australia/Sydney';
const stubbed_ant = "stubbed ant";
const date_format = "Y";

public function testBlankCategoryIfNoCacheExists() {
$cat = '';
$cache_filename = $cat.'.xml';
if (file_exists($cache_filename))
unlink($cache_filename);

$stub = $this->stub_Freshant($cat);

$expected_output = self::stubbed_ant;
$actual_output = $stub->getant();
$this->assertEquals($expected_output, $actual_output);
}

public function testDummyWithoutStubbing() {
$nostub = new AntProxy(self::sample_client_id, '', self::timezone, self::date_format);
$this->assertTrue(true);
}

private function stub_FreshAnt($cat) {
$stub = $this->getMockBuilder('AntProxy')
->setMethods(array('getFreshAnt'))
->setConstructorArgs(array(self::sample_client_id, $cat, self::timezone, self::date_format))
->getMock();

$stub->expects($this->any())
->method('getFreshAnt')
->will($this->returnValue(self::stubbed_ant));

return $stub;
}
}

这就像在框架的一种模拟方法中留下了断言。有没有办法显示每个(通过的)断言?

最佳答案

在每个测试方法完成后,PHPUnit 会在测试期间验证模拟期望设置。 PHPUnit_Framework_TestCase::verifyMockObjects()为每个创建的模拟对象增加断言的数量。如果您确实需要,您可以通过存储当前断言数、调用父方法并减去差异来覆盖该方法以撤消此操作。

protected function verifyMockObjects()
{
$count = $this->getNumAssertions();
parent::verifyMockObjects();
$this->addToAssertionCount($count - $this->getNumAssertions());
}

当然, verifyMockObjects()如果任何期望不满足,将抛出断言失败异常,因此您需要捕获异常并在重置计数后重新抛出它。我会把它留给你。 :)

关于phpunit - mock 会影响你的断言计数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602179/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com