gpt4 book ai didi

c - 模拟和 Win32 API 调用

转载 作者:太空狗 更新时间:2023-10-29 17:06:34 25 4
gpt4 key购买 nike

我目前使用的产品是用 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

您当然可以在您的项目中添加一个 header ,重新定义您要模拟的 API 函数:

#ifdef UNITTEST
#undef MessageBox
#define MessageBox UnitTestMessageBox
#endif

通过重新定义名称,您可以避免在整个源代码中散布大量条件编译。

关于c - 模拟和 Win32 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com