从外向内进行开发时,我仍然不确定如何最好地使用Mocks(即首先模拟客户需求的写测试)
假设客户的要求是"客户可以取消订单".
我可以为此编写测试 - Test_Customer_Can_Cancel_Her_Order.
使用TDD然后编写业务类并模拟数据访问层(或比我的业务逻辑层"更深"的任何层).太棒了,我的测试通过,我只测试业务层而不是下面的任何层.
现在我想知道的是......我什么时候深入研究并开始编写和测试数据访问层?顶级测试后直接?只有在我编写集成测试时?也许没关系?只要它在某个时刻完成了吗?
就是想...
这是一个棘手的问题.有些人认为测试"私有"代码是可以的,有些人认为不是.这当然更容易,因为您不必执行复杂的设置来重现应用程序状态,该状态允许您测试要添加的小功能(您可以直接测试该功能).我曾经是那些人之一,但现在我说最好只测试公共API(创建测试和设置,只做和看到用户可以做什么和看到什么).这样做的原因是,如果您只测试公共API,那么您将获得无限的重新分解潜力.如果您测试私有代码,如果您选择重新考虑因素(使您不太容易"无情地重构",从而导致代码错误),则必须更改测试.
但是,我不得不说,仅测试公共API 会导致更复杂的测试框架.
因此,为了更具体地回答您的问题,您的下一步是尝试考虑当前订单取消代码存在问题并编写新的高级设置以重现该问题的情况.您提到了数据访问测试.创建数据库损坏的高级设置,并测试您的应用程序是否正常运行.
哦,如果对于GUI应用程序来说,它有点棘手,因为你真的不想达到测试鼠标点击和读取像素的程度.那太傻了.如果您使用(并且您应该)MVC系统,请在控制器级别停止.