typescript 以随机顺序运行单元测试有什么意义呢?

toiithl6  于 2023-03-19  发布在  TypeScript
关注(0)|答案(1)|浏览(109)

我注意到Karma在我的Angular构建中的默认行为是以随机顺序运行Jasmine单元测试。与每次都以相同顺序运行测试相比,以随机顺序运行测试有什么好处?

mkshixfv

mkshixfv1#

有时候,测试修改的状态不会在每次测试运行时重置。也许某个测试修改了所有测试共享的全局变量。也许某个测试向数据库写入了一些内容,但在测试完成时没有将其清除。这些事情 * 不应该 * 发生,但有时确实会发生。
例如:

// Stupid contrived example. Don't ever do this.

let num = 0

it('A', () => {
  expect(num + 1).toEqual(1)
})

it('B', () => {
  num = 10
  expect(num + 2).toEqual(12)
})

it('C', () => {
  expect(num + 3).toEqual(13) // passes if B is run before C, otherwise fails
})

如果你总是运行测试A,然后B,然后C,这可能会很好。但是如果你只运行测试C,奇怪的事情可能会发生。因为测试A和B做了修改,当你同时运行它们时,C通过了。但是当你单独运行测试C时,它失败了。
而现在你盯着你的终端输出目瞪口呆地咕哝着“测试C到底怎么会失败呢?!它刚刚通过了!”
随机化测试顺序对这一点有点帮助。每个测试 * 应该 * 完全独立,不应该关心它们以什么顺序运行。随机化它们可能有助于发现这个缺点。
那么,既然顺序不应该是重要的,那么为什么不随机化顺序呢?

相关问题