单元测试应该模拟所有外部服务吗?
Unit tests should mock all external services?
我正在为磁盘设备管理器创建单元测试,它在 Linux 中格式化磁盘、管理磁盘分区并创建逻辑卷和组。这个磁盘管理器是一个更大的应用程序中的 class。我当然必须创建测试来测试 (1) 磁盘设备管理器 class 和 (2) OS 命令和用于执行磁盘操作的库的集成。
1) 这些测试会 class 化为单元测试或集成测试吗?它们看起来像单元测试,因为它们只测试我的应用程序的一个模块,但它们也像集成测试,因为它们依赖于外部代码。
2) 还模拟 OS 命令和外部库行为来创建独立的单元测试是否值得?
提前致谢。
集成测试验证两个(或更多)真实 组件如何协同工作。通常组件有一些明确定义的 API 并且通过它进行测试 运行 以确保 API 实现。单元测试仅验证一个单元 (class)。我们正在使用模拟来模拟单元测试中的 "external" 行为。
因此,当您针对真实系统 (OS) 测试您的组件时,这就是集成测试。
为了验证独立于真实环境的 class 行为,准备模拟是值得的。例如,您可能希望在构建(持续集成)后启动这些单元测试并验证回归。在这种情况下,您希望 运行 非常快,而不是处理真正的 OS.
我正在为磁盘设备管理器创建单元测试,它在 Linux 中格式化磁盘、管理磁盘分区并创建逻辑卷和组。这个磁盘管理器是一个更大的应用程序中的 class。我当然必须创建测试来测试 (1) 磁盘设备管理器 class 和 (2) OS 命令和用于执行磁盘操作的库的集成。
1) 这些测试会 class 化为单元测试或集成测试吗?它们看起来像单元测试,因为它们只测试我的应用程序的一个模块,但它们也像集成测试,因为它们依赖于外部代码。
2) 还模拟 OS 命令和外部库行为来创建独立的单元测试是否值得?
提前致谢。
集成测试验证两个(或更多)真实 组件如何协同工作。通常组件有一些明确定义的 API 并且通过它进行测试 运行 以确保 API 实现。单元测试仅验证一个单元 (class)。我们正在使用模拟来模拟单元测试中的 "external" 行为。
因此,当您针对真实系统 (OS) 测试您的组件时,这就是集成测试。
为了验证独立于真实环境的 class 行为,准备模拟是值得的。例如,您可能希望在构建(持续集成)后启动这些单元测试并验证回归。在这种情况下,您希望 运行 非常快,而不是处理真正的 OS.