我发现存根和模拟在测试中非常有用。 但我想知道一件事。我想一个例子会清楚地表明它。
Class A {
public function isOk() {
// some work
}
public function iAmDepend() {
if ($this->isOk()) {
// do work
}
}
}
class TestA {
public function testIsOk() {
// Test itOk here
}
public function testIAmDepend() {
mock(A)->method(isOk)->return(true);
// tests for iAmDepend
}
}
这样做是明智的吗?测试类的Stub方法。或者它可能违反一些规则?
PS。我无法重构代码
答案 0 :(得分:1)
您的示例是正确的,即testIsOk
只测试IsOk
,testIAmDepend
只测试IAmDepend
。
但是你必须要理解模拟和存根之间的重要区别:difference between mock and stub。
在您的示例中,如果testIAmDepend
正在验证已使用某些参数调用isOk
,并且这是您对unittest断言的一部分,那么这是 mock 。否则这是 stub ,你不会验证它是否已被调用。