问题来源:
做测井软件的开发的时候,因为很多系统的接口都是用的兼容多字节和unicode编码的形式写的,比如 接口LogMsg中的参数 LPCTSTR lpszModuleName , LPCTSTR lpszMessage都是可变的类型
virtual void LogMsg( LPCTSTR lpszModuleName , LPCTSTR lpszMessage ,SYSTEMINFOTYPE nInfoType )=0 ;
因为工程开发用的是unicode版本,而我的单元测试gtest是多字节版本,就造成了很多地方不兼容,其次在开发的过程中用到了很多在MFC中定义的数据类型,比如CString,而我的多字节的gtest是不支持CString的
目的:
1.修改gtest的编译使其支持unicode和工程的配置选项一致
2.能够支持MFC中的CString数据类型
解决方案:
重新编译gtest,然后将gtest生成的库gtest.lib应用到我们新的支持Unicode编码的单元测试工程中,具体如下:
我用的是gtest1.70的源码
1.先用cmake生成VS的编译工程(选择最新的VS工程 )
2.然后VS2010打开升级成2010的工程(我用的是VS2019打开升级到2019的工程,然后编译套件选择的V100)
3.更改编译选项
a用宽字节Unicode编码(属性-genneral-编码)为了支持unicode编码
b.更改MFC的使用标准windows->为mfc共享dll(属性-genneral-MFC使用方式) 为了支持使用MFC,
c 更改运行时环境 (debug)MTd->MDd(c++代码生成 -运行时)为了使用MFC如果选择MTd,会出现和单元测试的工程不兼容的问题,需要忽略很多库,并且会提示链接器工具警告 LNK4217
4.创建一个控制台工程
a.将gtest的头文件拷贝过去(gtest工程目录下的include目录下的gtest目录)
b.将gtest.lib添加到工程中(属性-链接-输入)
c.修改main函数
int main(int argc, char* argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
在main中testing::InitGoogleTest用的是char类型的版本,我原来以为应该用宽字节的版本,但是用宽字节的版本,传递过去的参数 比如filter就没有起作用,在用char类型的情况下参数是起作用
5.设置工程的连接器->调试->生成调试信息->是 这样就可以在单元测试中调试我们的代码了 哪里出错了可以设置断点,原来我都是在程序中进行打印,没有这个方便
测试正常可以运行,运行的效果比较慢 。
gtest1.7编译支持unicode测试和MFC支持CString的使用-桌面系统文档类资源-CSDN下载不需要积分即可下载
我看gtest已经有新的版本等后续有时间将gtest升级到新的版本,但是新的gtest编译器好像需要更高的编译套件,vs2010已经开始不支持
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)