0


Parasoft C++test 单元测试常见问题总结-2

这里写自定义目录标题

单元测试常见问题总结

1.QT项目测试环境-没有生成moc_文件

error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * …
错误提示如图:
在这里插入图片描述
配置方法如下:
选择需要生成moc文件的类的.h文件,鼠标右键属性,配置属性->常规,在项类型中将C/C++ 标头,改为自定义生成工具,点击应用
在这里插入图片描述
然后将自定义生成工具配置如下:
命令行:“$(QTDIR)\bin\moc.exe” “%(FullPath)” -o “.\GeneratedFiles$(ConfigurationName)\moc_%(Filename).cpp” -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB “-I.\GeneratedFiles” “-I.” “-I$(QTDIR)\include” “-I.\GeneratedFiles$(ConfigurationName).” “-IKaTeX parse error: Undefined control sequence: \include at position 8: (QTDIR)\̲i̲n̲c̲l̲u̲d̲e̲\QtCore" "-I(QTDIR)\include\QtGui” “-I$(QTDIR)\include\QtWidgets” “-I…\SDK\boost” “-I…\inc”
说明:Moc%27ing wsthread_client.h
输出:.\GeneratedFiles$(ConfigurationName)\moc_%(Filename).cpp
附加依赖项:$(QTDIR)\bin\moc.exe;%(FullPath)
配置完成后右键点击头文件选择编译,添加筛选器:GeneratedFiles, 然后将生成的moc_XXX.cpp文件添加进项目,重新生成即可
–其他方法:
1.添加筛选器:GeneratedFiles
2.添加->现有项->找到原项目中GeneratedFiles文件夹中 已生成好的moc_文件
3.添加上moc_文件放入筛选器GeneratedFiles,重新生成

2.QT图形界面的类初始化失败的问题

QWidget/QDialog等图形界面的类初始化失败
原因:没有QApplication的实例,界面相关的类无法使用。
选择对应项目右键菜单->parasoft->属性->构建设置,添加-DCPPTEST_INIT_QT=1
在这里插入图片描述

3.测试用例程序启动失败

出现测试日志读取错误,错误信息如下:
在这里插入图片描述按照log提示进入目录,找到xxxx_utestTest.exe,双击,此时会提示却少xxx.dll
在这里插入图片描述
解决方法,找到相关的DLL文件放入该目录即可。

4.由于循环出现测试超时

1.创建该函数桩函数,控制循环条件进入或退出循环
3.其他情况可用C++ test帮助文档提供的处理方式:如下图:
CPPTEST_REGISTER_JMP (expression)
使用setjmp或sigsetjmp并计算传递的表达式。
可以使用CPPTEST_JMP API调用。此宏通常在测试用例中使用
其中它包装对测试函数的调用(请参见以下示例)
CPPTEST_JMP (value)
执行longjmp调用(longjmp或siglongjmp是
已使用),将执行状态恢复为最近调用的CPPTEST_REGISTER_JMP调用。
此宏通常在存根体内部使用。它接受一个整数参数通过cpptestGetJmpReturn函数。整数
参数可用于验证执行的跳转(参见下面的示例)。
int CDECL_CALL cpptestGetJmpReturn();
返回最近的CPPTEST_JMP调用,即longjmp/
siglongjmp,它是setmp/sigsetjmp。
示例:

/* Function to be tested */voidsignalData(void){while(1){// Get the returning frequency from the frequency sensor.if(scanFrequencySensor(returningFrequency)== FAILURE){// If sensor has an error, don't give semaphore, // report error, call recovery and retrylog_error("The sensor has encountered an error, retrying...\n");recover();}else{semGive(dataSemId);taskDelay(DELAY_TICKS);}}}/* Test case *//* CPPTEST_TEST_CASE_BEGIN test_signalData *//* CPPTEST_TEST_CASE_CONTEXT void signalData(void) */voidTestSuite_main_c_883563c3_test_signalData(){/* Pre-condition initialization *//* Initializing global variable returningFrequency */ 
 returningFrequency =0;/* Tested function call */CPPTEST_REGISTER_JMP(signalData())/* Post-condition check */CPPTEST_POST_CONDITION_INTEGER("cpptestGetJmpReturn()=",(cpptestGetJmpReturn()));CPPTEST_ASSERT_INTEGER_EQUAL(0,( returningFrequency ));}/* CPPTEST_TEST_CASE_END test_signalData *//* Stub *//** User stub definition for function: int scanFrequencySensor(int) */
EXTERN_C_LINKAGE intscanFrequencySensor(int returningValue);
EXTERN_C_LINKAGE intCppTest_Stub_scanFrequencySensor(int returningValue){staticunsignedint counter =0;unsignedint ret =0;
 counter++;//Simulate failure every 5 scans of the sensorif(counter ==5){CPPTEST_REPORT("Simulating sensor scan failure")
 ret = FAILURE;}elseif(counter ==10){CPPTEST_REPORT("Testing accomplished - going back to test casefor assertions 
check")CPPTEST_JMP(counter)}else{
 ret =scanFrequencySensor(returningValue);}return ret;}

When C++test executes the TestSuite_main_c_883563c3_test_signalData test case, it saves the jump
buffer prior to calling the tested function. When the tested code executes, it performs the call to
CPPTEST_JMP from the CppTest_Stub_scanFrequencySensor stub body, which transfers code
execution back to the test case to perform assertions checks.

5.桩函数常用接口

CppTest_GetCurrentTestCaseName()
CppTest_GetCurrentTestSuitName()
获取当前测试用例及测试套件名称,由此可确认唯一测试用例,实现通过桩函数为不同的测试用例设置不同的测试条件
某待测函数中函数中多次调用某函数,且每次需返回不同的返回值,可通过桩函数执行次数设置不同的返回值。
示例:

staticint count =0;......if(strcmp("TestSuite_abc_cpp_f0118097",CppTest_GetCurrentTestSuiteName())==0&&strcmp("test_init_6",CppTest_GetCurrentTestCaseName())==0){int __return;if(count ==3){
            count =0;
            __return =0;}
        count++;return __return;}
标签: c++ 单元测试 qt

本文转载自: https://blog.csdn.net/jiangyi091/article/details/129332326
版权归原作者 jiyiuni091 所有, 如有侵权,请联系我们删除。

“Parasoft C++test 单元测试常见问题总结-2”的评论:

还没有评论