Logo
Section 1 / 11

关于测试

了解测试及其不同类型。

导入

关于测试

了解测试及其不同类型。

我们真的需要测试吗?

在强静态类型(不一定是函数式)的领域中,我们可能会听到这样的说法:“它能编译通过,所以一定正确,因此不需要测试!”

虽然确实,在强静态类型的支持下,某些类型的测试可以省略,但这种观点忽略了即使程序类型正确,仍可能产生错误的结果。

另一种极端(来自动态类型语言的视角)则是用测试完全替代类型系统,这甚至更糟糕。请记住,测试通常是一种概率性方法,无法保证没有缺陷。如果你曾在两种范式下重构过大型代码库,你很可能会更加重视一个优秀的类型系统。

测试的类型

让我们思考一下我们需要哪些类型的测试。

  • 我们的服务必须能够读取和创建JSON格式的数据。该格式应保持固定,任何变更都应触发警报,因为这意味着我们的API已经失效。

  • 我们希望利用 ScalaCheck 的能力,实现基于属性的测试:这通常涉及检查输出是否具备某些特定特征。即使不直接使用属性测试,我们仍然可以用 ScalaCheck 自动生成测试数据。

  • 除了常规的单元测试——即分别测试服务中的每个独立组件之外,如果服务是完整构建的,还应该有集成测试。虽然单元测试可以覆盖大量内容,但最终真正重要的是所有组件协同工作的效果。而在实际应用中(尤其是在非纯函数式部分),为了实现隔离测试,往往需要大量模拟(mock)。

纯实现

生成器