我想在同一个类中模拟我正在测试的方法.
ClassA {
function hardToTest($arg) {
// difficult to test code
}
function undertest() {
return $this->hardToTest('foo');
}
}
我在想,我可以用反射来做到这一点,但也许这只是一个标志,我应该将hardToTest移动到另一个对象中.
如果undertest()将“foo”传递给hardTotest(),则此测试将成功.这在PHPUnit的文档中被称为部分模拟,因为你只是嘲笑一些方法.
ClassATest {
function testUndertest() {
$mock = $this->getMock('ClassA',['hardToTest']);
$mock->expects($this->once())
->method('hardToTest')
->with('foo');
$mock->undertest();
}
}
我同意你的直觉,这种需求可能是一个代码气味,告诉你这个班太多了.
PHPUnit 5.4
由于getMock()在5.4中已被弃用,请改用getMockBuilder():
$mock = $this->getMockBuilder('ClassA')
->setMethods(['hardToTest'])
->getMock();