行为驱动开发
BDD 通过使用人类可读的故事来实施测试。
例如,Cucumber 就是一种通过使用以普通英语编写的人类可读特征文件来实现 BDD 工作流程的工具:
Feature: Log in to site.
In order to see my profile
As a user
I need to log-in to the site.
Scenario: Logs in to the site
Given I am on "/"
When I follow "Log In"
And I fill in "Username" with "admin"
And I fill in "Password" with "test"
And I press "Log in"
Then I should see "Log out"
And I should see "My account"
现在,本节将对 Behat 进行简单介绍,以激发您的好奇心。如果你想了解更多,请访问 http://www.behat.org。
Behat 指南包含一个 ls
命令的用户故事示例。这是一个相当不错的示例,所以就在这里了:
Feature: ls
In order to see the directory structure
As a UNIX user
I need to be able to list the current directory's contents
Scenario: List 2 files in a directory
Given I am in a directory "test"
And I have a file named "foo"
And I have a file named "bar"
When I run "ls"
Then I should get:
"""
bar
foo
"""
为了安装 Behat,您可以修改您的 composer.json
文件,以便在开发环境中需要它:
{
"require-dev": {
"behat/behat": "~2.5"
},
"config": {
"bin-dir": "bin/"
}
}
这将安装 Behat 2.5 版本,此外还有 Behat 3 版本,该版本包含了一整套新功能,同时又不失向后兼容性。尽管如此,许多项目仍在使用 Behat 2。
然后,您可以使用以下命令运行 Behat:
bin/behat
输出结果如下:

TODO 未完成
总结
在本章中,我试图解决一些未解决的问题。我们通过了解 HTTP 讨论了 Web 开发的一些网络方面。除此之外,我们还了解了如何有效地设计 RESTful API。
本书即将结束;让我们重新审视一些使我们的代码变得优秀的核心价值观:
-
偏爱组合而非继承
-
避免重复编码(DRY 原则的意思是不要重复自己)
-
保持简单、愚蠢
-
不要为了使用设计模式而使用设计模式,当你发现设计模式可以解决重复出现的问题时,再引入设计模式
-
抽象是了不起的,接口可以帮助你抽象
-
按照良好的标准编写代码
-
在整个代码中分清责任
-
使用依赖管理和依赖注入;现在可以使用 Composer
-
测试可节省开发时间;测试对任何重构工作都至关重要,并可减少故障
感谢您阅读这本书;这本书是我对软件开发的一些想法的集合;在经历了极其多样化的职业生涯后,我学到了很多惨痛的教训,也重构了很多难看的代码。我见过一些最糟糕的情况,但我也参与了一些最令人兴奋的 PHP 项目。我希望在这本书中,我能分享我在这个领域的一些经验。
开发人员很容易将自己隐藏在开发的现实之外;很少有人知道软件设计和架构的最佳实践,而且只有很少的人选择 PHP 作为他们的开发语言。
对我们大多数人来说,我们生产的代码不仅仅是一种爱好或工作,它是我们作为软件工程师的表达极限。因此,以一种富有诗意、富有表现力和持久的方式编写代码是我们的责任。
想想你希望维护的代码;你有责任生成的代码。极简主义、降低复杂性和分离关注点是实现这一目标的关键。
计算机科学可能以数学和定理为基础,但我们的代码凌驾于其上。通过利用图灵完备语言的基础,我们能够编写具有创造性和功能的代码。
与其他许多学科相比,软件工程处于一个奇怪的真空状态;虽然非常度量化,但它也必须吸引人类。我希望这本书能帮助你实现这些目标。