unit-testing - 从测试的类中桩一个方法来测试另一个方法

标签 unit-testing mocking stub stubbing

我发现 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/

相关文章:

rest - 如何使用stubby4j stub 某些请求并为其他请求调用真实服务

unit-testing - 这些是我在使用单元测试时应该考虑的边缘情况吗?

ios - 未发现 Xcode swift 测试

c# - 有没有一种简单的方法可以在 C# 中使用内存存储来支持 OData 搜索?

python - MagicMock 和包装

c# - 如何在不使用模拟的情况下使用数据库对项目进行单元测试?

java - 客户端的 stub 文件是否重复(模拟)服务器端发生的所有操作

c# - 在使用 nSubstitute 和 Autofixture 作为 DI 容器的单元测试中,如何获取模拟对象?

angular - 你如何模拟 ActivatedRoute

node.js - NodeJS 和 Express——如何模拟 token 认证中间件进行测试?