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