【问题标题】:Mock storage when database should be injected by DI (through constructor)DI注入数据库时​​的模拟存储(通过构造函数)
【发布时间】:2013-03-22 21:11:24
【问题描述】:

我正在尝试尽可能地编写我的代码(并且可以很好地测试),但这是我正在考虑的事情。

我有一个对象,我通过 DI 传递依赖项

<?php    
public function __constructor(Connection $connection) {

}

当我编写单元测试时,我会使用我的 DI 容器并获取类似的对象

$object = $context->getService("class");

然后使用它的功能。

问题是,我怎样才能模拟连接或更好的“一些存储” - 不一定是数据库连接。

谢谢

【问题讨论】:

    标签: php unit-testing dependency-injection mocking


    【解决方案1】:

    问题在于(在我看来)在您的测试中使用 DIC。当我们对 Symfony2 应用程序进行单元测试时,我们会模拟每个依赖项(使用 Mockery)。我们为常见的 mock 构建了工厂,例如 DB 连接接口或 Redis 连接接口等。这加快了我们的测试创建过程。

    【讨论】:

    • 我一直在思考这个问题,但我仍然在问自己,“这真的是很好的解决方案吗?”但是当我从另一边看时,这是减少依赖关系和测试的唯一方法是精确的单元。只是一个问题,你在哪里做工厂?在测试目录或应用程序中?
    • 我们将它们与测试代码一起保存,因为它们创建的模拟仅与测试相关,与应用程序运行时无关。我们在部署时保留了测试目录,以保持交付量更小。
    • 非常感谢。这确实很有道理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多