我发现 stub 和模拟对测试非常有帮助。
但是我想知道一件事。我认为一个例子可以清楚地说明这一点。
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。我无法重构代码
最佳答案
您的示例是正确的,即testIsOk
仅测试IsOk
,而testIAmDepend
仅测试IAmDepend
。
但是您必须了解模拟和 stub 之间的重要区别:difference between mock and stub。
在您的示例中,如果testIAmDepend
正在验证是否已使用某些参数调用了isOk
,并且这是您对unittest的断言的一部分,那么这是模拟的。否则,这是 stub ,并且您将不验证它是否已被调用。
关于unit-testing - 从测试的类中桩一个方法来测试另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540393/