gtest1.7版本支持vs2010的 Unicode编码和MFC的测试

gtest1.7版本支持vs2010的 Unicode编码和MFC的测试,第1张

问题来源:

做测井软件的开发的时候,因为很多系统的接口都是用的兼容多字节和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已经开始不支持

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/734202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存