BDD和Behat的PHP脚本

时间:2016-04-01 14:55:49

标签: php post bdd behat

我正在创建一个php脚本,它应该处理它收到的POST数据(来自AJAX或其他)并将其进一步发送(到另一个脚本)。 我想知道如何以" BDD方式开发它"。

到目前为止,我已经完成了"处理部分"通过使用Behat编写功能并使用phpspec创建所需的块(类)。

但是在测试以下功能时我被阻止了:

  • 脚本只处理/接受POST数据,
  • 脚本在处理后仅进一步发送有效数据,
  • 如果数据无效,脚本会发回错误。

在我看来,我可以针对脚本本身编写测试,但后来我想知道:

  • 如果它是一个好主意(它确实看起来很简单但有点混乱,但因为没有太多的隔离)
  • 如何优雅地做到这一点(对于我来说,手动运行本地服务器并在我的测试/上下文中对其网址进行硬编码似乎很麻烦,但也许它只是这样做的方式)< / LI>

有任何想法或建议吗?

2 个答案:

答案 0 :(得分:1)

<强> BDD:

让我们尝试改变你的心态。 BDD是一个协作,自动化部分(测试)只是它的最后一部分。

您的验收测试,这是您通过Behat所做的,只应通过示例涵盖您的功能规范。这意味着,不要像通过单元/集成测试那样专注于测试所有可能的场景,而是仅指定描述您的功能的最小值,足以揭示该功能的意图。

在大多数情况下,示例仅涵盖积极情景,1-5就足够了。

这里没什么帮助。问问自己,如果这些示例是客户文档的一部分,您会提到什么? 通过示例的规范不亚于能够自动测试的应用程序的文档。

测试级别:

不幸的是,我不知道你的脚本的技术背景,所以答案将更多是一个理论。

验证测试的级别越多,测试的越多,覆盖的越多,但创建和维护的成本越高:

  1. UI
  2. 通过基础设施的HTTP请求
  3. 启动应用程序并注入虚假请求
  4. 直接致电控制器
  5. 调用正在处理域逻辑的应用程序服务
  6. 有我个人的做法。因为BDD在TDD方面是最好的,所以我总是从第5点开始,有时,我还添加更高级别3)以确保应用程序整体正常工作。我很少使用2)级和1)级,因为我不需要通过验收测试来测试我的基础设施,这不是他们的目的。

答案 1 :(得分:0)

这更像是一个评论而不是一个正确的答案,但它不适合评论......

首先,你正在努力test all the things。但是为了做BDD(因此使用Behat),对于利益相关者或业务的一部分,您应该与谁有关于手头功能的对话,有某种好处。

你只是描述一个接收特定输入的脚本并将其转换为特定输出的事实,听起来就像你对单元测试所期望的那样,对吗?

另一方面,如果这个特定的脚本正在解决利益相关者的需求,而且这个脚本有助于满足的故事或场景,我认为系统的状态会有某种变化,你可以测试。如果是这样,那么继续使用Behat描述它,与适当的利益相关者进行对话。我想您需要为系统设置一个环境,然后运行脚本,然后检查其状态是否已正确更改。