jam*_*mes 18 php phpunit unit-testing mocking
我想在我正在测试的同一个类中模拟一个方法.
ClassA {
function hardToTest($arg) {
// difficult to test code
}
function underTest() {
return $this->hardToTest('foo');
}
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以用反射来做这件事,但也许这只是我应该hardToTest进入另一个对象的一个标志.
Dav*_*ess 18
如果underTest()传递'foo'给该测试将成功hardToTest().这被称为PHPUnit文档中的部分模拟,因为您只是在嘲笑某些方法.
ClassATest {
function testUnderTest() {
$mock = $this->getMock('ClassA', ['hardToTest']);
$mock->expects($this->once())
->method('hardToTest')
->with('foo');
$mock->underTest();
}
}
Run Code Online (Sandbox Code Playgroud)
我同意你的直觉,这种需要可能是一种代码味道,告诉你这个课程做得太多了.
PHPUnit 5.4+
由于getMock()在5.4中已弃用,请getMockBuilder()改用:
$mock = $this->getMockBuilder('ClassA')
->setMethods(['hardToTest'])
->ge??tMock();
Run Code Online (Sandbox Code Playgroud)