Этот тест будет успешным, если 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();