classA::getValue()
调用另一个类classB::verifyValue()
中的方法。由于classB::verifyValue()
具有外部依赖关系,因此我希望能够将其模拟为仅在单元测试中返回true
。
我不想触及classB
中的任何其他内容,仅此一种方法。
答案 0 :(得分:2)
您可以像Spidy建议的那样创建测试存根,也可以使用PHPUnit的内置mock objects。两者都要求您能够为classB
提供classA
实例才能使用。
function testGetValue() {
// set up mock classB
$b = $this->getMock('classB', array('verifyValue'));
$b->expects($this->once())
->method('verifyValue')
->will($this->returnValue(true));
// set up classA
$a = ...
$a->setClassB($b);
// test getValue()
... $a->getValue() ...
}
答案 1 :(得分:0)
在测试中使用接口和MockClassB。例如,interfaceB具有verifyValue()。所以classB实现了interfaceB并覆盖了verifyValue。然后创建另一个名为MockClassB的类,并让它实现interfaceB。在你的测试代码中,而不是创建classB,创建MockClassB(MockClassB将返回true而不是依赖于外部依赖)。
如果这没有足够的意义,请查看“编程到接口,而不是实现”