《单元测之道》笔记

单元测试的定义:开发者编写一小段的代码,去检验被测代码的很小的、很明确的 功能是否正确。

目的:为了验证代码行为和开发者的期望是否一致。

必要的准备:
  1. 测试所需的条件(分配的资源,创建的对象等)
  2. 调用测试的方法
  3. 验证测试方法的行为与期望是否一致(断言assert)
  4. 完成后的清理
断言(assert):单元测试最基本的单位
Assert.AreEquals(expect, actual[, string message])如果比较浮点数则需要指定精度,
Assert.AreEquals(expect, actual,tolerance [, string message])
Assert.IsNull(object[, string message]),Assert.IsNotNull(object[, string message])
Assert.AreSame(expect, actual[, string message])判断是否是同一个对象
Assert.IsTrue(bool[, string message]),Assert.IsFalse(bool[, string message])
Assert.False([string message])测试立即失败,放在某些不该到达的分支内。

特性(attribute):
分类(category)[category("name")[, Explicit = true]]
组合,在每个[test]调用前后调用[SetUp]和[TearDown]
在测试类上前后调用[TestFixtureSetUp]和[TestFixtureTearDown]
异常[ExpectedException],[Test, ExpectedException(Typeof(ArgumentException))]抛出异常测试通过,接下的代码则不测试。
忽略[Test, Ignore(string message)]跳过此测试

测试内容(Right-BICEP)
right-结果是否正确
B-是否所有边界点都正确
  1. 完全伪造或者不一致的数据
  2. 格式错误的数据
  3. 空值或者不完整的值
  4. 与意料中合理的值想去甚远的值
  5. 不该出现重复值的list或者该有序但却无序list
  6. 事件到达的顺序不理想
I-能查反向关联吗:反向逻辑来验证
C-能用其他手段交叉检查吗
E-是否可以强制错误条件发生:Mock
  • 内存耗光
  • 磁盘用满
  • 时钟出问题
  • 网络不稳定和出问题
  • 系统过载
  • 受限的调色板
  • 显示分辨过高或过低
P-是否满足性能要求

CORRECT边界条件
correct原则:
  • C-conformance一致性
  • O-ordering顺序性:值是否有序
  • R-range区间性
  • R-reference依赖性或叫耦合性
  • E-existence存在性
  • C-cardinality基数性:是否有足够的值
  • T-time相对或绝对时间性:到达顺序
Mock对象:真实对象在调试阶段的替代品
真实对象的特点:
  1. 行为不确定
  2. 不可被创建
  3. 某些行为很难触发
  4. 令程序运行很慢
  5. 有用户界面
  6. 实际上并不存在
Mock对象模拟上述特点,测试的时候分三个步骤:
  • 使用一个接口来描述这个对象
  • 为产品代码实现这个接口
  • 以测试为目的,在Mock对象实现这个接口
好测试所具备的品质(A-TRIP)
A-automatic自动化
T-thorough彻底地
R-repeatable可重复的
I-independent独立的
P-professional专业的

项目中的测试
代码的存放:同一目录,同一程序集
测试频率:新函数,修正bug,版本控制的签入,持续不断的。

阅读更多
个人分类: C#
上一篇道听途说
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭