提问人:Pekka 提问时间:3/27/2010 更新时间:3/27/2010 访问量:187
在单元测试中查找失败模式
Finding patterns of failure in a Unit Test
问:
我是单元测试的新手,我只是开始构建测试套件。我有一个相当大的项目,我想从一开始就为它构建测试。
我正在尝试找出构建测试套件的一般策略和模式。当你看一门课时,由于课程的性质,许多测试显然会来找你。假设对于具有基本 CRUD 操作的“用户帐户”类,与数据库表相关,我们将要测试 - 好吧,CRUD。
- 创建一个对象并查看它是否存在
- 查询其属性
- 更改某些属性
- 将某些属性更改为不正确的值
- 并再次删除它。
至于如何打破常规,大多数 CRUD 类都有常见的“失败”测试,例如:
- 无效的输入数据类型
- 一个数字作为 ID 键,超出了所选数据类型的范围
- 输入不正确的字符编码
- 输入太长
依此类推。
对于与文件操作有关的单元测试,“中断性内容”列表可能是
- 文件名中的字符无效
- 文件名太长
- 文件名使用不正确的协议或路径
我很确定类似的模式——适用于当前正在进行的单元测试之外——适用于大多数正在测试的单元。
现在我的问题是:
我看到这种“突破模式”是正确的吗?还是我在单元测试方面完全错了,如果我做对了,这根本不是问题?单元测试是一个寻找尽可能多的方法来破坏单元的过程,这是正确的方法吗?
如果我是对的:是否有针对此类模式的现有定义、列表、备忘单?
是否有任何规定(主要是在 PHPUnit 中,因为这是我正在使用的框架)来自动化这些模式?
是否有任何帮助 - 以检查表或软件的形式 - 来帮助编写完整的测试?
答:
你基本上是对的。寻找可能破坏代码的方法是单元测试的关键部分和技能。但是,在 TDD 中应用的单元测试的工作方式略有不同。在 TDD 中,您首先为新功能编写测试,然后创建代码以使该测试通过。因此,即使最终结果是相似的,这里的重点也不同。
在TDD中,人们不断地“换帽子”——一点点测试,一点点编码。因此,在这种方法中,测试不是一个可自动化的部分,但几乎可以说它是创作过程的关键。在编写测试的同时,您也在设计单元的界面,并从其(未来)客户的角度思考 - 他们可以期待什么,他们应该提供什么?然后你换掉帽子,进入单位,以满足这些期望。
所以我觉得这不能通过简单地检查列表中的项目来取代。当然,一旦你没有想法来测试实际的单位,检查这样的列表永远不会有什么坏处。但是,就其性质而言,此类工作表只能包含可能适用于也可能不适用于特定项目和特定要测试的类的概括。但是您显然有经验和心态,无论如何都可以为您的特定单元找到好的测试用例:-)
评论