0

我有一个包含许多大型(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 等工具。

4

1 回答 1

1

LLVM 项目提到了KLEE工具,它有助于创建测试用例来执行所有路径(并在过程中发现错误)。其中一些是面向 Unix 的,它是一个当前的研究项目(粗糙的边缘,需要一些组装,以及其他免责声明)。

于 2013-01-20T03:13:50.927 回答