我想在同一个类中模拟我正在测试的方法.
ClassA { function hardToTest($arg) { // difficult to test code } function underTest() { return $this->hardToTest('foo'); } }
我在想,我可以用反射来做到这一点,但也许这只是一个标志,我应该将hardToTest移动到另一个对象中.
如果underTest()将“foo”传递给hardToTest(),则此测试将成功.这在PHPUnit的文档中被称为部分模拟,因为你只是嘲笑一些方法.
原文链接:https://www.f2er.com/php/139659.htmlClassATest { 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();