有没有办法为多个匹配断言模拟类方法字符串参数?
$this->getMock()
->expects($this->any())
->method('setString')
->with($this->stringContains('word3'))
->will($this->returnSelf());
此示例将传递给 - > setString(' word1 word2 word3 word4')
如果使用包含' word1'的参数调用setString(),我需要做的是匹配AND' word3'
但是
$this->getMock()
->expects($this->any())
->method('setString')
->with(
$this->stringContains('word1'),
$this->stringContains('word3')
)
->will($this->returnSelf());
这个实现正在检查setString()的2个参数,这不是我打算检查的。
想法?使用$ this-> callback()?有没有更合适的PHPUnit断言?
答案 0 :(得分:4)
我知道这个答案已经很晚了,但我遇到了同样的问题,并找到了一个似乎更聪明的解决方案...... :)
试试这个:(未经测试的情况下)
$this->getMock()
->expects($this->any())
->method('setString')
->with($this->logicalAnd(
$this->stringContains('word1'),
$this->stringContains('word3')
))
->will($this->returnSelf());
答案 1 :(得分:1)
我想这会做你想要的:
$this->getMock()
->expects($this->any())
->method('setString')
->with(
$this->callback(
function($parameter) {
$searchWords = array('word1', 'word3');
$matches = 0;
foreach ($searchWords as $word) {
if (strpos($parameter, $word) !== false) {
$matches++;
}
}
if ($matches == count($searchWords)) {
return true;
} else {
return false;
}
}
))
->will($this->returnSelf());
回调函数检查来自$ searchWords数组的两个值是否都是传递给setString()方法的第一个参数的一部分。