从测试类中绑定一个方法来测试另一个方法

时间:2012-07-18 11:34:41

标签: unit-testing mocking stub stubbing

我发现存根和模拟在测试中非常有用。 但我想知道一件事。我想一个例子会清楚地表明它。

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。我无法重构代码

1 个答案:

答案 0 :(得分:1)

您的示例是正确的,即testIsOk只测试IsOktestIAmDepend只测试IAmDepend

但是你必须要理解模拟和存根之间的重要区别:difference between mock and stub

在您的示例中,如果testIAmDepend正在验证已使用某些参数调用isOk,并且这是您对unittest断言的一部分,那么这是 mock 。否则这是 stub ,你不会验证它是否已被调用。