dob
← 全部笔记

· 测试

单元、集成、E2E:测的不是同一层世界

单元测试、集成测试、E2E 测的不是同一层世界。金字塔为什么下宽上窄。

        ⬆️
      / E2E  \      ← 5~10%
     /  集成   \    ← 20~30%
    /   单元    \   ← 60~70%

单元测试:测最小单元

一个函数、一个方法、一个类。外部依赖全部 mock。

  • 快,毫秒级
  • 挂了就知道是哪一行
  • 覆盖正常、边界、异常
  • 看不到模块之间对不上的问题

用例从代码结构来:输入、输出、边界值、异常条件。

@Test
void testAdd() {
    assertEquals(3, calculator.add(1, 2));
}

集成测试:测模块怎么握手

依赖是真的:真数据库、真服务调用。慢,秒级。能抓住「参数格式变了、返回值对不上」这种单测永远测不到的事。坏处是挂了不好定位是哪一层的错。

用例从接口契约来。可以把它想成:把单元测试里的 happy path 去掉 mock,换上真实依赖。

不是所有单测都能升成集成测试。超时、异常注入这些边界,真实依赖上很难稳定复现。

「这个方法调了很多外部方法,它本身就是集成,为什么还要单测?」因为单测里那些依赖是假的,你测的是想象中的它们。集成测的是真实世界里的它们。

E2E:测用户这条路通不通

从用户端走到服务端,整条业务。最慢最贵,一条可能要几分钟;也最接近真实体验。出问题最难定位:前端、后端、数据库、第三方,都可能。

用例从需求来,不是从代码来。只问「用户要做什么」,不问类怎么拆。

所以金字塔才是那个形状:贵的少写,便宜的多写。想用 E2E 覆盖所有分支,账算不平。