【问题标题】:PHP: Test driven development with an MVC applicationPHP:使用 MVC 应用程序进行测试驱动开发
【发布时间】:2017-01-22 12:28:17
【问题描述】:

我已经为我的项目的关键业务逻辑编写了一些单元测试,并且我了解 TDD 的概念和优缺点 - 我只是从来没有真正“一路走 TDD”,首先编写测试并且东西。我目前正在从事一个不是我自己开发的中型项目,这非常糟糕:根本没有测试,紧密耦合的架构,没有依赖注入,遗留 MVC 框架等等 - 不太理想.我正在考虑使用 Laravel 或 Symfony 从头开始​​,并应用 TDD 来真正实现松散耦合和可测试的代码。

我知道,对于这样一个“大型”项目,一头扎进 TDD 可能不是一个好主意,所以我想我会做几个测试项目,看看 TDD 如何影响我的代码设计和质量。为了它,让我们假设它只是某种“电影租赁应用程序”,具有用户注册和租借电影的功能(如果可用)。我们还假设我已经做了一些 UML 图,并且我对所需的对象、它们的关系和所需的业务逻辑有一些想法。

那么:从哪里开始?在与在 MVC 框架上进行 TDD 的人交谈时,有些人倾向于“隔离”业务逻辑的一个功能并从验收测试开始,该功能是“显示可用电影列表”,测试类似于“导航到/movies 并针对某些 HTML 进行断言”或其他任何内容。对我来说,这并不是一个好的开始。

就我个人而言,我喜欢从用户登录或用户管理之类的功能入手——这些功能几乎都是支持应用程序而不是业务逻辑本身。如果我使用这种方法,我会不会故意忽略我已经知道我需要的功能?让我们假设电影列表测试有效,所以我会添加另一个测试,如“OnlyLoggedInUserCanSeeMovieList”,看到它失败并将逻辑添加到代码中 - 我知道在我编写第一个测试之前我需要的逻辑。我很难相信这会带来更好的代码,因为我故意不实现我已经知道的功能。

这只是个人喜好还是有什么类似的最佳实践让我开始?你们如何在 Symfony 或 Laravel 等框架中开始使用 TDD?在这种情况下进行纯 TDD 是否还有意义,因为框架本身已经处理和测试了很多应用程序逻辑?不要误会我的意思:我不想就 TDD 的利弊展开另一场战争——我敢肯定,一旦我完全理解了这一点,我可以从中受益。尽管如此,现在这感觉像是在相当简单的功能上取得了可笑的微小进步,我觉得我最好只对应用程序逻辑的重要部分进行单元测试,而不是做所有的“写测试,看到它失败,写代码,重构”迭代。

感谢您的意见,

克里斯

【问题讨论】:

    标签: php unit-testing model-view-controller tdd


    【解决方案1】:

    我会说首先你需要做一些研究来找到你将使用的包。例如你说你宁愿开始对你的用户管理进行单元测试,除了在 fSymfony 中你已经有了很好的用户管理包附带他们的测试系列。 所以我想说,开始你的项目的第一步是找到已经存在的并且适合你的需求。在尽可能地抽象之后,应该更容易看到从哪里开始(通常编写测试以确保您正在使用的所有捆绑软件一起正常工作)。

    希望能帮助您入门

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多