Jer*_*nce 6 unit-testing mocking
据我所知,在极限编程和单元测试中,测试必须由另一个开发人员在另一个开发测试方法之前完成(或者从相同的开发人员开始,但测试必须在方法实现之前编写).
好吧,看起来不错,我只需要在给它一些参数时测试一个方法是否具有良好的行为.
但理论与实践的区别在于理论上没有,但在实践中却存在......
我第一次尝试测试时,由于物体之间的关系,我发现在某些情况下很难.我发现了嘲弄的做法,我发现它非常有用,但有些概念让我怀疑.
首先,mocking隐含地说:"你知道该方法是如何运行的,因为你必须知道它需要什么其他对象......".好吧,理论上我的朋友鲍勃写了测试,他只知道当我给它"john"字符串时该方法必须返回true ...这是我使用dao来访问数据库而不是使用内存中的哈希表...
我的可怜的朋友鲍勃将如何编写测试?他会期待我的工作......
好吧,似乎不是纯粹的理论,而是无所谓.但是如果我查看很多模拟框架的文档,它们允许我测试一个方法的调用次数和顺序!哎哟...
但是如果我的朋友Bob必须测试这种方法以确保良好地使用依赖关系,那么该方法必须在测试之前编写,不是吗?
哼......帮我的朋友鲍勃......
我们什么时候停止使用模拟机制(订单验证等)?模拟机制有用吗?理论,实践和模拟:什么是最佳平衡?
您在描述中似乎缺少的是将合同与实施分开的概念.在C#和Java中,我们有接口.在C++中,只由纯虚函数组成的类可以填充此角色.这些并不是必需的,但有助于建立逻辑分离.因此,除了您似乎遇到的混乱之外,练习应该更像:鲍勃为一个特定的类/功能单元编写单元测试.在这样做时,他为其他类/单元定义了一个或多个接口(合同)来支持这个接口.他不需要立即编写这些文件,而是用模拟对象填充它们,以提供他的测试和被测系统所需的间接输入和输出.因此,一组单元测试的输出不仅仅是驱动单个单元开发的测试,而且还包括需要由其他代码实现的合同以支持当前正在开发的单元.
归档时间: |
|
查看次数: |
2701 次 |
最近记录: |