核心审查智能体

测试分析师

确保您的测试真正保护您

测试通过并不意味着您的代码正确。测试分析师找出漏洞——缺失的边缘情况、 不稳定的测试和隔离问题,这些都会让 bug 悄悄溜过。

测试分析师能发现什么

测试套件中让 bug 逃逸的漏洞

缺失的边缘情况覆盖

理想路径已测试,但空值、空数组和边界条件呢?

空输入空集合边界值错误路径

不稳定测试

时而通过时而失败的测试——CI/CD 信心的隐形杀手

时间依赖顺序依赖共享状态网络调用

测试隔离差

相互依赖或共享可变状态的测试——调试噩梦

共享 fixtures数据库污染全局状态测试顺序 bug

覆盖所有测试类型

从单元测试到 E2E,测试分析师全面审查

单元测试

函数和类级别的测试

集成测试

组件交互测试

E2E 测试

端到端用户流程测试

API 测试

端点和契约测试

快照测试

UI 回归检测

性能测试

负载和基准测试

提升测试质量

测试改进的真实案例

缺失的边缘情况

薄弱测试
describe('calculateDiscount', () => {
  it('applies 10% for orders over $100', () => {
    expect(calculateDiscount(150)).toBe(15)
  })

  it('applies 5% for orders over $50', () => {
    expect(calculateDiscount(75)).toBe(3.75)
  })

  // What about $0? Negative? Exactly $50? $100?
})

缺少边界值测试:$0、$50、$100、负数

健壮测试
describe('calculateDiscount', () => {
  it('applies 10% for orders over $100', () => {
    expect(calculateDiscount(150)).toBe(15)
  })

  it('applies 5% for orders over $50', () => {
    expect(calculateDiscount(75)).toBe(3.75)
  })

  it('returns 0 for orders at boundary', () => {
    expect(calculateDiscount(50)).toBe(0)
    expect(calculateDiscount(100)).toBe(5) // 5% tier
  })

  it('handles zero and negative gracefully', () => {
    expect(calculateDiscount(0)).toBe(0)
    expect(calculateDiscount(-10)).toBe(0)
  })
})

为边界值和无效输入添加边缘情况测试

不稳定测试检测

薄弱测试
it('shows notification after save', async () => {
  await user.click(saveButton)

  // Flaky! Depends on timing
  await waitFor(() => {
    expect(screen.getByText('Saved!')).toBeVisible()
  })

  // Even worse: arbitrary timeout
  await new Promise(r => setTimeout(r, 100))
  expect(notificationCount).toBe(1)
})

任意超时和时间假设

健壮测试
it('shows notification after save', async () => {
  await user.click(saveButton)

  // Wait for specific state change
  await waitFor(() => {
    expect(screen.getByRole('alert')).toHaveTextContent('Saved!')
  })

  // Assert on observable behavior, not timing
  expect(
    await screen.findByRole('alert', { name: /saved/i })
  ).toBeVisible()
})

等待可观察的状态变化,而非时间

测试隔离问题

薄弱测试
let testUser: User

beforeAll(async () => {
  // Shared across ALL tests — mutations leak!
  testUser = await createUser({ name: 'Test' })
})

it('updates user name', async () => {
  await updateUser(testUser.id, { name: 'Updated' })
  // Now testUser.name is 'Updated' for all following tests
})

it('checks original name', () => {
  // FAILS! Previous test mutated shared state
  expect(testUser.name).toBe('Test')
})

beforeAll 中的共享状态在测试之间泄漏

健壮测试
describe('user updates', () => {
  let testUser: User

  beforeEach(async () => {
    // Fresh user for EACH test
    testUser = await createUser({ name: 'Test' })
  })

  afterEach(async () => {
    await deleteUser(testUser.id)
  })

  it('updates user name', async () => {
    await updateUser(testUser.id, { name: 'Updated' })
    expect(testUser.name).toBe('Updated')
  })

  it('checks original name', () => {
    // Works! Fresh testUser with original name
    expect(testUser.name).toBe('Test')
  })
})

使用 beforeEach 实现测试隔离

测试分析

测试分析师如何工作

测试分析师不只是计算测试数量——它分析测试实际测试了什么。 它找出您的测试覆盖与代码需求之间的差距。

路径分析

映射代码路径以找出未测试的分支

不稳定性检测

识别时间和顺序依赖

边缘情况建议

推荐需要添加的具体测试用例

分析流水线

1

分析测试覆盖率

映射哪些代码路径已测试,哪些未测试

2

识别薄弱点

找到没有测试的边缘情况和错误条件

3

检测反模式

发现不稳定模式和隔离问题

4

建议改进

推荐需要添加的具体测试用例

为什么测试质量很重要

糟糕的测试比没有测试更糟——它们给人虚假的信心

捕获真正的 Bug

覆盖边缘情况的测试能在用户之前发现 bug

可靠的 CI/CD

不再需要"重试直到变绿"——测试通过或失败都有真实原因

安全重构

好的测试让您可以放心地修改代码

100% 覆盖率毫无意义,如果测试不能捕获 bug。
测试分析师确保您的测试真正有效。

真正保护您的
测试

让测试分析师找出您测试套件中的漏洞。 免费试用 14 天,无需信用卡。

边缘情况检测
不稳定测试预防
隔离分析