据我了解,TDD的典型工作流程(W1)如下:


开发功能测试;
运行测试并观察它是否失败;
开发功能;
再次运行测试并观察其通过;
重复1。


但是,使用Meck和其他模拟框架,工作流程(W2)可能如下:


为所有功能编写测试,并观察它们是否失败;
在模拟对象的帮助下开发完整的系统原型(所有功能及其交互);
再次运行测试,并观察它们是否通过;
逐步将每个模拟功能更改为真实的功能。


我倾向于认为W2优于W1:


写得更快
易于集成,因为所有测试(单元测试和集成测试)都将预先编写;他们也将从一开始就通过。


因此,问题是:

W2是否真的具有上述优势?如果没有,我如何将Meck作为既定例程纳入我的日常开发中,即使用它的工作流程是什么?还是我应该在没有任何指导的情况下随机使用Meck?

最佳答案

您不能排他性地使用模拟来使测试通过。如果可能的话,要么您的测试不值得其名称,要么您无需用“真实”代码替换该模拟,因为模拟已经完成了您希望代码执行的操作。

模拟通常用于将被测系统(SUT)(即您要测试的类)与其依赖项隔离开来。依赖关系是模拟的,SUT不是。

关于unit-testing - Meck and Test Driven Development工作流程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12085746/

10-12 04:08