模拟和Win32 API调用

前端之家收集整理的这篇文章主要介绍了模拟和Win32 API调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用的当前产品是用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相关文章