我正在使用的当前产品是用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
#ifdef UNITTEST #undef MessageBox #define MessageBox UnitTestMessageBox #endif