我读过很多关于TDD主题的书籍和网站,它们都很有意义,特别是Kent Beck的书.然而,当我尝试自己做TDD时,我发现自己正盯着键盘,想知道如何开始.你使用过程吗?你的思考过程是什么?你如何确定你的第一次测试?
关于这个主题的大部分书籍都很好地描述了TDD是什么,而不是如何在现实世界的非平凡应用中练习 TDD.你是怎么做TDD的?
实际上,它比你想象的要容易.您只需在每个班级使用TDD.应该测试您在课堂上的每个公共方法的所有可能结果.因此,您看到的"概念证明"TDD示例也可以用于具有数百个类的相对较大的应用程序中.
您可以使用的另一种TDD策略是通过封装主应用程序行为来模拟应用程序测试运行.例如,我编写了一个框架(在C++中,但这应该适用于任何OO语言),它代表一个应用程序.有初始化,主runloop和关闭的抽象类.所以我的main()方法看起来像这样:
int main(int argc, char *argv[]) { int result = 0; myApp &mw = getApp(); // Singleton method to return main app instance if(mw.initialize(argc, argv) == kErrorNone) { result = mw.run(); } mw.shutdown(); return(result); }
这样做的好处是双重的.首先,可以将所有主要应用程序功能编译到静态库中,然后将其与测试套件和此main.cpp存根文件链接.其次,这意味着我可以通过为argc&argv []创建数组来模拟主应用程序的整个"运行",然后模拟main()中会发生什么.我们使用这个过程来测试许多真实的功能,以确保应用程序在给定某个真实的输入数据和命令行参数语料库的情况下生成它应该做的事情.
现在,您可能想知道如何为具有真实GUI,基于Web的界面或其他任何应用程序的应用程序进行更改.对此,我只想说使用模型来测试程序的这些方面.
但简而言之,我的建议归结为:将测试用例分解到最小的水平,然后开始向上看.最终,测试套件会将它们全部放在一起,最终您将获得合理水平的自动化测试覆盖率.