一个好的单元测试有什么属性?

Lud*_*uer 3 attributes unit-testing

单元测试应该

  • 产生确定性结果
  • 独立
  • 有效
  • ...

测试还应该具备哪些其他特性?

Men*_*elt 7

啊.我最喜欢的科目:-)从哪里开始......

根据Gerard Meszaros的xUnit测试模式(关于单元测试的书)

  • 测试应该降低风险,而不是引入风险.
  • 测试应该很容易运行.
  • 随着系统的发展,测试应该易于维护

有些事情可以让这更容易:

  • 只有一个原因,测试才会失败.(测试应该只测试一件事,例如避免多个断言.)
  • 由于这个原因,应该只有一个测试失败.(这可以保持您的测试库可维护)
  • 最小化测试依赖性(不依赖于数据库,文件,ui等)

其他要注意的事项:

命名
具有描述性名称.测试名称应该与规范一样.如果你的名字太长,你可能会测试太多.

结构
使用AAA结构.这是模拟框架的新时尚,但我认为这是构建所有测试的好方法.

安排您的上下文
法案,做需要测试的事情
断言,断言您要检查的内容

我通常将测试划分为三个代码块.了解这种模式可以使测试更具可读性.

Mocks vs. Stubs
当使用模拟框架时,总是尝试使用存根和基于状态的测试,然后再进行模拟.

存根是代表您尝试测试的对象的依赖关系的对象.您可以将行为编程到它们中,并且可以在测试中调用它们.Mocks通过让你断言是否被调用以及如何调用来扩展它.模拟是非常强大的,但它允许您测试实现而不是代码的前后条件.这往往会使测试更加脆弱.