我按照您的工作方式工作。而且我不会告诉你你做不到。我会警告您可能会遇到的问题。
当每个单元测试都只是一个改造时,很难学习使其变得灵活。它们往往只不过是回归测试。由于您从未使用过它们来帮助您进行重构,因此编写编写实际上使重构更加困难的测试非常容易。这往往会失控,直到您对TDD失去全部信心。
但是,您已经在做某事。我不会告诉你停下来。我会说,值得您花些时间探索并从一开始就遵循红绿色重构周期的其他事情是值得的。确保您确实使用测试来帮助您进行重构。除非您掌握了这种工作方式,否则请谨慎地将其用于重要的事情上。这是一种非常不同的编码方式,需要习惯。半途而废不会有任何好处。
那说
我发现首先编写集成测试,处理代码,然后对API进行某种程度的加固后,实际上可以轻松地添加单元测试。可以说,我可以在我的主要功能上运行的测试类型比其他任何东西都更“端到端”。
理解单元测试不只是作用于一个类的测试。只要您正在使用的API可以在不执行以下任何一项操作的情况下进行测试,就可以进行单元测试:
- 它与数据库对话
- 它通过网络通信
- 它触及文件系统
- 它不能与任何其他单元测试同时运行
- 您必须对环境做一些特殊的事情(例如编辑配置文件)才能运行它。
Michael Feathers:一组单元测试规则
因此,如果您的端到端测试涉及多个对象,那很好。这是单元测试,而不是对象测试。
就像不需要再测试私有方法,然后通过测试使用私有方法的公共方法对它们进行测试一样,对象也不需要在其自己的测试工具下进行初始开发。只有当对象被认为独立于端对端故事使用时,才真正需要像对待它们具有自己的界面和行为那样来对待它们。如果您对此有所注意,那就是将这些对象公开。这样,您就不会做未经测试的承诺。