是否有任何使用测试驱动的开发开发的开源应用程序可以作为良好的单元测试应该如何工作的模型?
我更喜欢在C#和.NET中查看示例。(请注意,我提到的是应用程序,而不仅仅是库。)
我是一个中层程序员,他真的想相信并实践TDD。我在日常工作中使用的应用程序非常复杂-大约一百万行代码-我很想介绍更多的单元测试。我们已经进行了一些单元测试,但是我在TDD上所做的工作以及已经在测试中的代码的工作都没有令人鼓舞。
以我公认的有限经验,TDD似乎以去耦的名义鼓励了很多复杂性。应用程序中难以测试的部分(巧合地往往很关键)被推向外围,进入了可能会或可能永远不会编写的集成测试领域。(我在这里想到了通常的可疑对象,文件系统访问,从数据库中添加对象,异步Web调用等)
被测试的代码往往涉及对象之间的大量协作,也许还涉及一些简单的流逻辑,所有这些都发生在内存中,并且如果不必完全分离所有对象,则可以用更简单,更易理解的方式编写供测试用。
我了解模拟依赖项等的技巧,但是根据我的经验,大量使用模拟会导致非常脆弱的测试。如果我看到许多测试变成红色的第一个直觉是:“好,现在我必须修复所有模拟程序”,那么我的测试就成了阻力,而不是安全网。
我正在努力克服这一精神障碍,在其中,我正在阅读Michael Feathers的书《有效地使用Legacy Code》。我希望它能告诉我一些我所缺少的东西。
我还想研究一些具有良好代码覆盖率的.NET应用程序,例如内容管理系统或CRUD应用程序。Bob叔叔谈论的FitNesse测试框架是我可能要看的东西,但是很高兴看到用我最熟悉的语言编写的东西。
任何建议或智慧的话,将不胜感激。