【发布时间】:2016-03-26 14:47:48
【问题描述】:
我决定自己做一个穷人的 ORM 框架。由于我不知道如何去做,我决定在测试之前进行开发。 Github。在让它按照我想要的方式工作之后,我意识到我的代码是不可测试的,因为我的查询类的静态方法和 BaseModel 之间的紧密耦合。
所以我想了一些方法让它可测试:
- 让每个查询方法接收一个连接对象:但这意味着当我尝试在 BaseModel 类中使用这些方法时,我仍然必须将连接对象与 BaseModel 紧密耦合。
- 保持原样:这意味着在 PHPUnit 测试期间,我将不得不覆盖 BaseModel。
无论哪种方式,我都觉得我做的不对。我相信有更好的方法来完成这项工作,我需要你们的帮助。谢谢
【问题讨论】:
-
快速浏览了你的代码,看看下面的文章verraes.net/2014/06/when-to-use-static-methods-in-php。你可能需要重构一些东西。好的应用程序从技术设计开始,以避免出现问题并轻松实现单元测试等额外功能
-
我认为这个问题可能比堆栈溢出更适合 codereview.stackexchange.com。在回答您的问题时,由于多种原因,您基本上不能对依赖于静态的代码进行单元测试。您最好尽可能避免使用静态方法并依赖其他技术,例如依赖注入(传递东西)。静力学有时有其用途,但总的来说,它们造成的问题比解决的问题多。
-
@GordonM,是的,你是绝对正确的,如果你看看我的第一个建议,它是针对依赖注入的,但最终必须消耗静态方法,最终导致紧密耦合。如果你仔细观察你会发现使用静态方法是有意义的,尤其是在使用 BaseModel::getAll()
标签: php unit-testing oop static