TDD What should be the order of unit testing, integration testing and acceptance testing?

时间:2016-07-11 23:25:43

标签: php phpunit codeception

I am doing TDD for a project using PHP. Until now, I write unit tests, make them fail and then write the least amount of code to fulfill the test. After the project has been completed, I write acceptance testing using CasperJS.

Of late I have been looking into Codeception and Behat and some other test frameworks and have been reading about different types of tests like Unit Testing, Integration Testing et al.

Nowhere could I find the correct order of testing.

What I want to know is when I sit down to design the project, I do:

  1. Requirement Analysis
  2. Technology Stack Selection
  3. Enumerate the Resources/Business Entities
  4. Then decide what goes into Models, what stays as Services etc.
  5. Database Design
  6. Do the list of Models, Controllers, Services necessary
  7. Write tests before writing the individual classes using phpUnit
  8. Once API is ready, write CasperJS tests to verify behavior.

While this is not exact, but a good indication of how I run my shop. So, where do integration testing and behavior testing fit in?

1 个答案:

答案 0 :(得分:3)

这真的感觉像一个基于意见的问题,所以如果它因此而关闭,不要感到惊讶。确实没有一个完美的答案,决定如何以及何时编写测试真的取决于项目和你。

您可以尝试计算所有用户故事和行为,并在步骤3之前编写验收测试。这可以帮助阐明计划中的黑暗角落。

或者,您可以在开始功能之前编写验收测试。这有助于让您了解在给定功能,范围和边缘情况下需要完成的工作。

或者,您可以在项目完成后编写验收测试。这可以作为预期行为的最终检查清单,然后交给客户进行他们想要进行的任何验收测试。

我确信您工作流程中的其他要点可能适合编写验收测试,但这些是我发现自己编写此类测试的三点。 IMO,最好的地方就在开始一个功能之前。那时候,我有一个用户故事,我熟悉已编写的代码,并且我知道新代码应该做些什么。

可以组织验收测试,以便以与单元测试相同的方式指导编码,但是在更广泛的层面上。仍然遍历"编写失败测试,​​编写代码以进行测试通过,编写失败测试,​​"但也有一个由验收测试驱动的更大的循环。一旦你到达内循环的某个点,你认为你将通过验收测试,那就检查一下整个套件。

您可以通过另一种方式询问"集成和行为测试的适用范围,"这就是"该测试在哪里与我的其他测试和代码相适应?"这有点灰色。应经常进行单元测试。整个单元测试套件。 经常。所以它需要非常快。您应该能够知道您是否立即破坏了项目内部的某些内容

集成测试用于验证输入和输出是否按预期工作。在您的应用之外,您的依赖关系不会发生变化,如果他们这样做,那么您应该知道这应该是一件大事。因此,您的代码和他们的代码之间有明确的界限。您的单元测试可以将您带到该界面。集成测试验证您编码的接口,确实是他们提供的接口。每次代码更改都不需要运行它们。您确实需要运行它们,但可能只需要每次提交。它们可能会变慢。

验收测试与集成测试类似,只是为了验证外部依赖关系以验证接口是否匹配,而是定义接口。你可以坚持运行它们直到接近发布,但你运行它们的次数越多,它们实际提供的价值就越多。

因人而异。