如果单元测试相互依赖可以吗?

hel*_*leg 6 unit-testing

如果测试共享和改变一些公共状态,并且它们的逻辑取决于以前的测试怎么办?这是可以接受的做法吗?简单代码例如(js):

describe('Some tests', () => {
  const state = {
    value: 'test'
    addMe() {
      this.value = this.value + ' me'
    }
    addPlease() {
      this.value = this.value + ', please'
    }
  }

  it('Some test', () => {
    state.addMe()
    expect(state.value).toBe('test me')
  })

  it('Another test', () => {
    state.addPlease()
    expect(state.value).toBe('test me, please')
  })
})
Run Code Online (Sandbox Code Playgroud)

Dir*_*ann 9

通常,测试的设计不应相互依赖。这当然不是法律,而是一种很好的做法,因为它为您的测试套件提供了许多不错的属性:

  1. 通过独立测试,您可以在任何地方添加测试、删除测试、重新排序测试,而不会对其他测试产生意外影响。

  2. 您可以单独改进测试,而不必考虑对其他测试的影响,例如简化测试的内部工作。

  3. 无需查看其他测试即可理解每个测试,并且在测试失败的情况下更容易找到失败的原因。

  4. 独立测试分别成功和失败。对于相关测试,如果一项测试失败,后续测试也可能失败。

  5. 您可以有选择地执行测试,例如在测试用例执行期间节省时间。