我有一个包含许多大型(1000 多行)函数的 DLL。这段代码有很多复杂的逻辑,我想确保它在维护时不会被破坏,所以我创建了一个动态加载这个 DLL 并调用它的 API 的测试工具。
我想知道一种能够从我的测试工具中测试在此 API 中命中的代码分支的好方法。我能想到的唯一方法如下:
// Pseudo test code
void doTest()
{
loadDllToBeTested();
dll_api_function_1();
assert( dll_api_function_1_branches.branch1Hit == true );
unloadDllToBeTested();
}
// Real api in the C dll
struct dll_api_function_1_branches
{
bool branch1Hit;
}
dll_api_function_1_branches g_dll_api_function_1_branches;
int private_func1()
{
printf("Doing my private stuff\n");
return 1;
}
void dll_api_function_1(void)
{
if ( private_func1() )
{
printf("doing some stuff\n");
dll_api_function_1_branches.branch1Hit = true; // so the test code can check if we got here :(
}
else
{
printf("doing some other stuff\n");
}
// tons of other logic and branching...
}
这基本上是每个函数都有一个结构,当在函数内到达某些分支时,它会设置值。将有一个此结构的全局导出实例,测试代码必须将其初始化为零,然后在调用 API 后进行检查。
另请注意,我使用的是 Visual Studio,因此无法在此处使用 gcov 等工具。