我有一个要模拟的类,并确保只调用了其中一个方法。如何在PHPUnit中构造这样的模拟对象?像
public function testSystemUnderTestOnlyInvokesFoo() {
$myMock = $this->createMock(ClassWithManyMethods::class);
$myMock->expects($this->once())->method('foo');
// Something like this
// $myMock->expects($this->never)->method($this->anyMethodExcept('foo'))
function_under_test($myMock);
}
答案 0 :(得分:2)
method
函数同时接受字符串和Constraint
类。 PHPUnit测试可以使用实用工具功能isNull
,contains
或matches
创建约束类。在示例中,anyMethodExcept
转换为以下代码:
public function testSystemUnderTestOnlyInvokesFoo() {
$myMock = $this->createMock(ClassWithManyMethods::class);
$myMock->expects($this->never)
->method($this->logicalNot($this->matches('foo')));
$myMock->expects($this->once())->method('foo');
function_under_test($myMock);
}
如果您要排除几种方法,请像这样使用matchesRegex
:
$myMock->expects($this->never)
->method($this->logicalNot($this->matchesRegex('/foo|bar|baz/')));