模拟和Win32 API调用
发布时间:2020-12-14 04:11:03 所属栏目:Windows 来源:网络整理
导读:我正在使用的当前产品是用C编写的 Windows服务,并且所有新功能都将为其编写单元测试.但是这会产生一个有趣的问题(对我来说至少)我们会针对各种事情做很多Win32调用并相应地运行,所以为了完成单元测试,测试各种输出会很好,而不仅仅是当前系统州. 我的问题是模
我正在使用的当前产品是用C编写的
Windows服务,并且所有新功能都将为其编写单元测试.但是这会产生一个有趣的问题(对我来说至少)我们会针对各种事情做很多Win32调用并相应地运行,所以为了完成单元测试,测试各种输出会很好,而不仅仅是当前系统州.
我的问题是模拟Win32调用结果的最佳方法是什么?我考虑过两种不同的方法: 1)将所有使用的Win32调用放入函数指针,并将它们传递给使用它们的函数或类(取决于它们被击中的次数),并使用它来获取模拟结果. 2)到处都有很多#ifdef UNITTEST,如果它正在调用我自己的特殊方法,或者如果没有则调用正常的方法. 我完全偏离这里,还是错过了一个基本知识?
关于(2),采用字符串参数的大多数Win32函数已经将它们的公共形式定义为宏,例如,来自WinUser.h:
WINUSERAPI int WINAPI MessageBoxA( __in_opt HWND hWnd,__in_opt LPCSTR lpText,__in_opt LPCSTR lpCaption,__in UINT uType); WINUSERAPI int WINAPI MessageBoxW( __in_opt HWND hWnd,__in_opt LPCWSTR lpText,__in_opt LPCWSTR lpCaption,__in UINT uType); #ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif // !UNICODE 您当然可以在项目中添加标题,重新定义要模拟的API函数: #ifdef UNITTEST #undef MessageBox #define MessageBox UnitTestMessageBox #endif 通过重新定义名称,您可以避免在整个源代码中散布大量条件编译. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-8 – 屏幕关闭时,WinRT应用程序可以继续运行吗?
- microsoft-office-365 – 如何更改Office 365安装的关联用户
- windows-server-2008 – IIS7 w3wp进程挂起循环
- xaml – WP7中更厚的ProgressBar,怎么样?
- windows-server-2012 – 我的DC可以用作远程桌面授权服务器
- Win10操作系统无法访问局域网共享文件夹的问题
- Gnuwin32 find.exe在执行搜索之前扩展通配符
- window 杀固定端口的进程
- windows-server-2008-r2 – Windows Server 2008 R2 – 180
- Windows 8上的Python 3.3上的NumPy