Ash*_*ary 6 php phpunit mocking stub
我有一个类想要在稍后的测试中进行模拟:
class Original {
function calculate($a) { ... }
}
Run Code Online (Sandbox Code Playgroud)
测试中:
$mock = $this->getMock('Original',['calculate']);
$mock->expcets($this->any())
->will($this->returnValueMap([
[1,'ABC'],
[2,'BCD']
// somehow tell $mock to call the original calculate() here
);
Run Code Online (Sandbox Code Playgroud)
我想告诉在某些条件$mock下回退到原始版本calculate(),例如,如果参数与任何提供的检查不匹配。据我从阅读 PhpUnit 代码中了解到,如果未找到匹配项,调用程序将返回 null :-?
$mock = $this->getMockBuilder(Original::class)
->setMethodsExcept(['calculate'])->disableOriginalConstructor()
->getMock();
Run Code Online (Sandbox Code Playgroud)
无论如何,这都会调用原始的计算函数。
模拟的要点是不调用原始版本,因为它具有您无法控制测试的依赖项。当您想要实际测试calculate()函数时,请调用测试并使用带有设置参数的普通代码来获得您想要的响应。
class Original {
function calculate($a) { ... }
}
$mock = $this->getMock('Original',['calculate']);
$mock->expects($this->any())
->will($this->returnValueMap([
[1,'ABC'],
[2,'BCD']
$Orig = new Original();
$this->assertEquals(4, $Orig->calculates('2 * 2');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9610 次 |
| 最近记录: |