编写更好的单元测试的技巧

Fun*_*ung 5 testing unit-testing

你们用来编写更好的单元测试的一些技巧或工具或政策(除了有单元测试标准)有哪些?更好的是,我的意思是"在尽可能少的测试中覆盖尽可能多的代码".我说的是你用过的东西,看到你的单元测试突飞猛进.

作为一个例子,我前几天尝试了Pex,我认为这真的很棒.我错过了一些测试,Pex很容易地向我展示了哪里.不幸的是,它有一个相当严格的许可证.

那么你们正在使用/做什么的其他一些很棒的东西呢?

编辑:很多好的答案.我将标记为正确的答案,我目前没有练习,但肯定会尝试,希望能带来最好的收益.谢谢大家.

jas*_*hin 11

  1. 每种方法编写许多测试.
  2. 尽可能测试最小的东西.然后测试下一个最小的东西.
  3. 测试所有合理的输入和输出范围.IOW:如果你的方法返回boolean,请确保测试false和true返回.对于int?-1,0,1,n,n + 1(通过数学归纳证明).不要忘记检查所有异常(假设Java).4A.首先编写一个抽象接口.4B.先写下你的测试.4C.最后写下你的实现.
  4. 使用依赖注入.(对于Java:Guice - 据说更好,Spring - 可能已经够好了)
  5. 使用像mockito这样的好工具包模拟你的"单位"合作者(再次假设Java).
  6. 谷歌很多.
  7. 继续敲打它.(花了我2年时间 - 没有太多帮助,但谷歌 - 开始"得到它".)
  8. 阅读一本关于这个主题的好书.
  9. 冲洗,重复......


Rob*_*obS 2

在我当前的项目中,我们使用一个小型生成工具来为各种实体和访问器生成骨架单元测试,它为需要测试的每个模块化工作单元提供了相当一致的方法,并为开发人员测试他们的实现(即默认添加其余实体和其他依赖项时添加单元测试类)。

(模板化)测试的结构遵循相当可预测的语法,并且模板允许实现特定于模块/对象的构建/拆卸(我们还为所有测试使用基类来封装一些逻辑)。

我们还在静态函数中创建实体实例(并分配测试数据值),以便可以以编程方式创建对象并在不同的测试场景和跨测试类中使用,这被证明是非常有帮助的。