2009-02-26 74 views

回答

7

啊予以考虑。我最喜欢的科目:-)从哪里开始?

据杰拉德·梅萨罗斯(阅读本书对单元测试)的xUnit测试模式

  • 测试应该降低风险,不 介绍吧。
  • 测试应该很容易运行。
  • 测试应易于维护 系统升级的身边

有些事情要使它更容易些:

  • 测试只能失败,因为一个 原因。 (测试应该只测试一件事,例如避免多次断言。)
  • 应该只有一个测试因为这个原因而失败。 (这让你的testbase维护)
  • 最小化测试依赖

其他的事情(在数据库,文件,UI 等没有 依赖)查看:

命名
有一个描述性名称。测试名称应该像规范一样阅读。如果你的名字太长,你可能会测试太多。

结构
使用AAA结构。这是模拟框架的新时尚,但我认为这是一种很好的方式来构建像这样的所有测试。

安排您的上下文
法,这样做需要的东西进行测试
断言,声称要检查

我通常把我的测试中的代码三个大块内容。了解这种模式使得测试更具可读性。

嘲弄与存根
当使用模拟框架总是试图诉诸嘲讽前使用存根和基于状态的测试。

存根是代表您试图测试的对象的依赖关系的对象。您可以将行为编程到它们中,并且可以在测试中调用它们。嘲笑通过让你声明他们是否被调用以及如何进行扩展。嘲笑是非常强大的,但它可以让你测试实现,而不是你的代码的前后条件。这往往会使测试更脆弱。

+0

+1的xUnit测试模式书是一个必须IMO的人想写出好的单元测试。 – mezoid 2009-02-26 08:17:21

+0

+1,但我不得不说这本书似乎更多地是关于自动测试,而不是“单元测试”本身。 – Spoike 2009-02-26 08:49:28

1
  • 不能访问外部资源
  • 可读
3

Pragmatic Programmers的答案:好的测试应是A-TRIP

  • 自动
  • 彻底
  • 重复
  • 独立
  • 专业
1
  • 可自动化:没有人工干预,应要求运行测试(CI)。
  • 完成:它们必须涵盖尽可能多的代码(Code Coverage)。
  • 可重复使用:无需创建将只执行一次的测试。
  • 独立:独立执行测试不应该影响另一个的性能。
  • 专业:测试应该具有相同的值作为代码,同样的专业精神,文档等
0

其他要记住的因素是运行时间。如果测试运行时间过长,可能会被跳过。

0
  1. 必须是全自动的。
  2. 不得假设任何先决条件 (产品X被安装,文件和Y 位置等)。
  3. 必须是独立人士,尽可能 运行脚本有关。但是,结果可以仅由专家专家分析 。
  4. 必须在每个测试版上运行。
  5. 必须提供可验证的报告。
0

单元测试应该很快:几百个测试应该能够在几秒钟内运行。

1

我没见过其他人提到的一个是。单元测试应该测试一件特定的事情,就是这样。我试图通过将它们重构为自己的方法来实现只有一个断言并最小化设置代码的数量。我也会创建我自己的自定义断言。一个很好的小单元测试IMO大约10行或更少。当一个测试很小时,很容易就能很快理解测试正在做什么。从长远来看,大型测试最终无法维持。

当然,小事不是我唯一的目标......它只是我在单元测试中看重的东西之一。 :-)

0

测试是不是一个单元测试,如果:

  • 它谈论到数据库
  • 它通过网络
  • 通信倒是文件系统
  • 这不可能与任何其他单元测试同时运行
  • 您必须对您的环境执行特殊的操作(例如编辑配置文件)才能运行它。

做这些事情的测试并不差。通常他们值得写作,而且可以用单元测试工具编写。但是,能够将它们与真正的单元测试分开很重要,以便我们可以保留一组测试,以便在进行更改时能够快速运行。

来源:A Set of Unit Testing Rules