gpt4 book ai didi

PHPUnit willReturnMap 方法 - 回调参数

转载 作者:行者123 更新时间:2023-12-02 15:30:35 26 4
gpt4 key购买 nike

我的用例比较复杂,但为了简单起见:

class MockObject {
public function test($param1, callable $callback = null) {
return is_null($callback) ? $param1 : $callback($param1);
}
}

我想使用 returnMap 为我的其他测试模拟这个类。

$map = [
['a', null, 'a'],
['b', $WHAT_SHOULD_BE_HERE?, 'b']
];

$mock = $this->getMock('MockObject');
$mock->expects($this->atLeastOnce())->method('test')->willReturnMap($map);

$this->assertEquals('a', $mock->test('a')); // Works
$this->assertEquals('b', $mock->test('b', function($value){return $value})); // Doesn't work

最佳答案

只需定义一个 $callback 并在映射和断言中使用它:

$callback = function($value) { return $value; };

$map = [
['a', null, 'a'],
['b', $callback, 'b']
];

$mock = $this->getMock('MockObject');
$mock->expects($this->atLeastOnce())->method('test')->will($this->returnValueMap($map));

$this->assertEquals('a', $mock->test('a')); // Works
$this->assertEquals('b', $mock->test('b', $callback)); // Should work

您可以通过使用计算返回值的函数来更好地控制所有情况:

$mock = $this->getMock('MockObject');
$mock->expects($this->atLeastOnce())
->method('test')
->will($this->returnCallback(function($param1, $param2) {
// return value depends on parameters
}));

关于PHPUnit willReturnMap 方法 - 回调参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011571/

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