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:
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?
答案 0 :(得分:3)
这真的感觉像一个基于意见的问题,所以如果它因此而关闭,不要感到惊讶。确实没有一个完美的答案,决定如何以及何时编写测试真的取决于项目和你。
您可以尝试计算所有用户故事和行为,并在步骤3之前编写验收测试。这可以帮助阐明计划中的黑暗角落。
或者,您可以在开始功能之前编写验收测试。这有助于让您了解在给定功能,范围和边缘情况下需要完成的工作。
或者,您可以在项目完成后编写验收测试。这可以作为预期行为的最终检查清单,然后交给客户进行他们想要进行的任何验收测试。
我确信您工作流程中的其他要点可能适合编写验收测试,但这些是我发现自己编写此类测试的三点。 IMO,最好的地方就在开始一个功能之前。那时候,我有一个用户故事,我熟悉已编写的代码,并且我知道新代码应该做些什么。
可以组织验收测试,以便以与单元测试相同的方式指导编码,但是在更广泛的层面上。仍然遍历"编写失败测试,编写代码以进行测试通过,编写失败测试,"但也有一个由验收测试驱动的更大的循环。一旦你到达内循环的某个点,你认为你将通过验收测试,那就检查一下整个套件。
您可以通过另一种方式询问"集成和行为测试的适用范围,"这就是"该测试在哪里与我的其他测试和代码相适应?"这有点灰色。应经常进行单元测试。整个单元测试套件。 经常。所以它需要非常快。您应该能够知道您是否立即破坏了项目内部的某些内容。
集成测试用于验证输入和输出是否按预期工作。在您的应用之外,您的依赖关系不会发生变化,如果他们这样做,那么您应该知道这应该是一件大事。因此,您的代码和他们的代码之间有明确的界限。您的单元测试可以将您带到该界面。集成测试验证您编码的接口,确实是他们提供的接口。每次代码更改都不需要运行它们。您确实需要运行它们,但可能只需要每次提交。它们可能会变慢。
验收测试与集成测试类似,只是为了验证外部依赖关系以验证接口是否匹配,而是定义接口。你可以坚持运行它们直到接近发布,但你运行它们的次数越多,它们实际提供的价值就越多。
因人而异。