C单元测试常规练习

时间:2015-08-19 22:42:37

标签: c unit-testing cpputest

例如,我的生产代码(假设它构建为可执行文件)具有

file_a.c (sub_module A)
   int func_a() {
      ....
   }

file_b.c (module B)
   func_b () {
       ...
       ret = func_a();
       ...
   }

对于单元测试,我使用的是CppUTest。如果我用实际代码A测试B,那么

  1. 我需要真正实现A,
  2. 我们可能无法从func_a()生成所有不同的可能输出。
  3. 如果func_a()调用其他模块的函数,很难发现/设置函数调用链内部的所有情况。
  4. mabybe这太极端了,但是我无法说服这个方法如何将所有代码链接在一起并简单地从main()进行测试?
  5. 但是如果我在测试B时模拟func_a(),那么一旦我开始测试A,链接器就会抱怨多个定义,因为现在实际的实现将被链接。 对于这个问题,我看到了两种方法

    1. 为每个file_a.c和file_b.c创建一个单独的测试可执行文件。但随着产量的增长,这将产生如此多的可执行文件,并且如果一些"真实的"和"模拟"需要进行组合测试。
    2. 将生产代码编译为共享库并将其链接到测试可执行文件,然后使用链接时间插入来拦截函数调用以实现真正的实现。
    3. 那么这种情况的常见做法是什么?我确信这是单元测试c代码的一种非常常见的场景。

      谢谢,

0 个答案:

没有答案