单元测试应该
产生确定性结果
独立
有效
...
测试还应该具备哪些其他特性?
啊.我最喜欢的科目:-)从哪里开始......
根据Gerard Meszaros的xUnit测试模式(关于单元测试的书)
测试应该降低风险,而不是引入风险.
测试应该很容易运行.
随着系统的发展,测试应该易于维护
有些事情可以让这更容易:
只有一个原因,测试才会失败.(测试应该只测试一件事,例如避免多个断言.)
由于这个原因,应该只有一个测试失败.(这可以保持您的测试库可维护)
最小化测试依赖性(不依赖于数据库,文件,ui等)
其他要注意的事项:
命名
具有描述性名称.测试名称应该与规范一样.如果你的名字太长,你可能会测试太多.
结构
使用AAA结构.这是模拟框架的新时尚,但我认为这是构建所有测试的好方法.
安排您的上下文
法案,做需要测试的事情
断言,断言您要检查的内容
我通常将测试划分为三个代码块.了解这种模式可以使测试更具可读性.
Mocks vs. Stubs
当使用模拟框架时,总是尝试使用存根和基于状态的测试,然后再进行模拟.
存根是代表您尝试测试的对象的依赖关系的对象.您可以将行为编程到它们中,并且可以在测试中调用它们.Mocks通过让你断言是否被调用以及如何调用来扩展它.模拟是非常强大的,但它允许您测试实现而不是代码的前后条件.这往往会使测试更加脆弱.