功能测试应该只断言响应吗?

时间:2018-08-04 15:02:11

标签: php unit-testing testing phpunit functional-testing

我对测试有些困惑。

我们使用Slim作为系统框架。据我所知,Unit Test是最少的测试。例如,测试类或方法是否按预期工作。

要测试系统的其他功能,例如,系统提供了一个用于搜索产品信息的API,此搜索功能是根据以下思路设计的:

  1. 客户将关键字发布到API条目。例如。 /search
  2. 处理请求并将SearchService注入控制器。
  3. 将关键字设置为SearhService
  4. 将关键字推入数据库。例如。 search_history
  5. 将搜索结果取回控制器,并响应客户端。

search API就是这样设计的。

我们为Search API创建了一个名为SearchTest的功能测试。我们就是这样做的:

  1. 使用$this->runApp()提供的Slim方法向API条目发送请求。
  2. 设置多个测试用例以测试不同类型的场景,例如“未提供关键字” “没有搜索结果” ...等。
  3. 确认返回预期值或HTTP状态的响应。

一些问题令人困惑:

  • 发送请求并声明响应,仅此而已吗?我们是否误解了所谓的“功能测试”
  • 我们不关心它的工作原理,只需要发送请求并声明响应,对吗?
  • 如果不是,我们是否应该检查依赖关系或使用的组件是否按预期工作?例如,我们是否应该连接到数据库,并检查关键字push成功与否?

1 个答案:

答案 0 :(得分:0)

自动测试(和一般测试)被认为是软件工程中的一种良好做法。但是,关于测试方法和类型分类的边界有很多热门讨论。

从这个意义上讲,一种正确实施测试方法的实用方法是向在您的软件开发环境中学习的人学习,并确保您采用的做法对您愿意实现的目标。 尝试对此保持一致。

仅供参考,lets take this definition.

  

功能测试是指验证代码的特定操作或功能的活动。这些通常可以在代码需求文档中找到,尽管某些开发方法可以根据用例或用户案例进行工作。功能测试往往会回答“用户可以执行此操作”或“该特定功能是否起作用”的问题。

考虑到这种方法,您希望测试使您确信用户能够执行应用程序提供的某些功能(或功能)。 (在这里)如何提供此功能并不重要,只需进入用户的鞋子并思考“我能从此操作中得到什么吗?” ,该问题的答案应提示您进行测试的主张。

  

非功能测试是指软件的某些方面,这些方面可能与特定功能或用户操作无关,例如可伸缩性或其他性能,某些约束下的行为或安全性。测试将确定断裂点,在该断裂点上,极端的可伸缩性或性能会导致执行不稳定。非功能性需求往往是那些反映产品质量的需求,特别是从用户的适应性角度而言。

如果您要测试如何执行某个函数,则可能是单元测试可以帮助您执行那些断言。

但是,再次提醒您,并不是要严格限制测试应从其名称中执行的内容,而是要知道哪种分类最适合所执行的断言类型(这有助于更好地构建测试结构)并清楚地说明您要测试的内容。 尝试保持一致,并专注于测试您真正需要自信的内容。