正在阅读:高效开发与彻底测试高效开发与彻底测试

2006-11-10 09:23 出处: 作者:王彤 责任编辑:lizhe

  只要写完了第一个测试用例的代码,更多的用例就简单了,只要拷贝并对输入输出数据进行修改就行。细心的读都可能已注意到,第一个测试用例的前后加了{},这是为了多个测试用例可以使用相同的变量名。

  使用这种方法,建立测试代码通常是很快的。编写很简单的函数时不需要调试,当然也不需要测试代码。测试代码的组织也很简单:一个产品工程对应一个测试工程,一个产品类对应一个测试类,一个需要测试的产品函数对应一个测试函数。测试工程可以加一个简单的界面,以便执行指定的测试,也可以使用相应的工具如 CppUnit。

  再回到我们的主题:调试。有了测试代码,调试就简单了,要调试某种输入,只要在相应的测试用例中加断点就行了。使用这种方式,仅就调试来说,好处也是非常明显的:
所有输入在一起列出来,调试比较全面,程序员的思维也会比较全面;
要调试指定的输入很容易,通常不需要高级断点,更不需要通过反复跟踪来捕捉需要的输入;
调试数据可以永久保存,避免了以后修改代码时的重复工作。

  
自动驱动

  在Visual Unit的支持下编码调试,除了兼具自然驱动和专门驱动的优点外,还能享受Visual Unit的独特殊功能带来的便利。

  首先我们用个人版来说明,个人版是免费的版本,并且开发商也提供免费的基本技术支持。

  Visual Unit具有丰富的文档,包括视频教程,这里不再叙述其基本使用方法。只要选择要测试(调试)的类和函数(如果使用企业版的IDE插件,会根据当前文档和光标位置自动选择),VU就会生成测试代码,并弹出测试用例编译器。VU是自动生成测试代码,而不是自动生成测试用例,也就是说,输入输出数据是由用户指定的,不过VU已经生成了输入输出数据的声明。下面是本例中VU生成的第一个测试用例的输入输出:

  输入部分:
CTokenList iList =

  输出部分:
ret ==

  这里的“=”和“==”仅仅表示可能需要赋值或判断输出,对于基本数据类型,可以直接填写数值,高级数据类型需要灵活处理(详细信息请查看帮助或教程)。只要把输入输出改为这样就完成了第一个测试用例的建立:

  输入部分:

       CTokenList iList = //多余的=会自动删除

       CTokenReader reader

       reader.ReadTokenList(iList, "int i")

  
输出部分:

       ret->type == "int"

       ret->name == "i"

  
  更多的测试用例,只要点击"新建",就会自动拷贝当前用例,只要修改输入输出就行了。这里没有涉及到成员变量和变局全量,不过都很简单的(成员变量用点操作符访问,全局变量直接访问),请查看帮助。

  可以看出,使用VU建立调试支持环境是很快速的:对于第一个测试用例,输入输出比较复杂时需要写少量简单的代码,输入输出简单时直接填写输入输出数值,其他测试用例只需点击一个按钮拷贝现有测试用例并修改输入输出就行,可以选择相近的用例来生成新的用例,这样通常只需要修改一两个数据就可以得到想要的用例。

  那么,还可以得到哪些好处呢?
  方便地进入调式:在被调试函数的入口加断点,并调试测试工程即可进入调试;
  方便地选择输入:在测试用例编辑器中轻点鼠标即可指定要调试的输入,如果执行了测试,只要点击出错的测试,就会自动选择相应的输入;
  方便地切换输入:调试过程中,不需要退出调试,就可以切换到其他输入:只要在测试用例编辑器中选择另一个测试用例,用调试器的"执行到光标所在行"命令回到函数入口,即可切换到新的输入;
  无限制后退重复:用调试器的"执行到光标所在行"命令可以自由地后退和重复执行,其实现的原理是"重来",后退时相关数据也会"还原",感觉上是真正的"后退",这个奇特而有用的功能是VU生成的测试代码自动实现的。

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品