我正在开发一个基于 Symfony2 和 PHPUnit 的项目。据我所知,功能测试代表了系统从用户角度应该做什么。但是,我对这种方法有一些疑问。
假设我正在测试一个用户注册表单。因此,提交表单后我应该做的第一件事是断言响应成功,发送了一封电子邮件,并可能在成功页面上进行断言。系统内部应存储注册日期、更改用户状态等。
问题是:检查注册日期和状态等底层代码是否应该包含在功能测试中?如果没有,进行此类测试的最佳位置在哪里?
最佳答案
如果您没有被迫将其包含在集成测试中,那么我建议您将其作为单元测试进行。一般来说,你的测试结构应该是一个金字塔:http://martinfowler.com/bliki/TestPyramid.html
我会把这个测试分成几个部分:
- 单元测试以检查信息是否以预期方式正确反序列化并创建预期数据结构
- 单元测试以检查该数据结构是否传递给特定服务(例如,存储库是否收到带有预期时间和其他参数的“保存”请求)
- 集成测试以检查存储库是否正确处理“保存”请求。这通常是“一般”测试,与这个特定的用户故事没有紧密关系。
- 一般(与此特定用户故事无关)集成测试,以检查经过单元测试的基础设施是否正确连接(包括 View /UI)
通过这种方式,您将获得许多单元测试,而只有少数集成/用户界面测试。那很好。那是因为维护功能测试需要付出很多努力,而且与单元测试相比非常慢
关于php - 断言的功能测试深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252495/