由于界面资源在单元测试时不存在,因此,涉及界面的类很可能构造失败,或其中某些成员函数不能正常执行。
对于写在涉及界面的类中的代码,VU仍然可以轻松地进行测试,但从代码的可维护性、可扩展性、可重用性角度来看,代码的功能逻辑应该尽量独立,尽量不要写在牵涉到界面的类中。
构造失败
构造失败是指调用构造函数时崩溃,下图是构造失败的例子。测试执行时崩溃,函数的全部代码均为未覆盖,表示在未进入被测函数前即崩溃。同时,信息窗口显示“xx类的构造函数产生错误....”。
VU提供了“用C方式构造”功能解决构造失败,这个功能会针对指定的类,跳过构造函数,采用C语言方式构造,但对基类、成员变量仍然调用构造函数,所构造的对象可以正常工作。方法是
:如下图,点击错误信息,右键菜单选择“改用C方式构造”,VU会自动重新执行测试,如果基类或成员变量对应的类也会构造失败,则需要继续“改用C方式构造”。用C方式构造的类对整个项目有效,即只需要设定一次,测试其他函数时不再需要设定。
可以从“代码”菜单选择“指定用C方式构造的类”,打开对应的编辑环境,如下图,删除所做的设定,也可从这个界面添加用C方式构造的类。
函数调用失败
续上例,如下图,虽然测试过程仍然崩溃,但函数代码的第一行为黑色,表示在执行这行代码时崩溃(测试崩溃时,最后一行黑色代码为崩溃点),即调用成员函数时崩溃,这种情形可以使用底层输入解决。如果这个函数产生了测试需要的数据,则直接设定该数据,如果此函数调用未产生测试需要的数据(如本例),则设为skip
it。请参考底层输入。
局部变量构造失败
如下左图,函数代码的第一行是一个局部变量定义,这行代码崩溃,也是构造函数失败,但这行代码的执行过程,VU不能直接干预,需要改为VU能干预的方式构造,方法是:在左边代码窗口,选中该行代码,右键菜单选择“局部输入(替换变量定义)”,如下右图,在弹出的窗口中填写变量类型(本例中为QApplication),变量名(本例中为app)。另外,在本例中,app.exec()会产生死循环,需用底层输入设为skip
it。
|