代码之家  ›  专栏  ›  技术社区  ›  Chris Arguin

C的单元测试框架[副本]

  •  6
  • Chris Arguin  · 技术社区  · 16 年前

    可能重复:
    Unit Testing C Code

    我看到了一些C++特有的问题,但我真的很好奇C。我想在我们的构建环境中添加一个标准的单元测试框架。我的主要目标是鼓励我们的开发人员编写单元测试,并将这些测试标准化,以便其他人可以运行它们。理想情况下,我想运行单元测试作为我们夜间构建的一部分。

    我们用CUnit开始了一些工作,除了所有的东西都在一个线程中运行,任何内存错误都会导致单元测试停止运行,这很烦人。我还发现编写测试非常困难,但这可能只是单元测试。

    有人知道好的选择吗?有没有使用C++代码的C++单元测试人员的经验?

    3 回复  |  直到 8 年前
        1
  •  2
  •   Dushara    16 年前

    我用C编写嵌入式软件,我决定自己编写框架。它非常简单,是为MS Visual Studio编写的。它很容易移植到其他平台。

    http://code.google.com/p/cunitwin32/

    如果你的目标是linux,我认为Check可以满足你的需求。

        2
  •  0
  •   Johannes Passing    16 年前

    如果你的目标是Win32平台或NT内核模式,你应该看看 cfix .

        3
  •  0
  •   philant    14 年前

    我们用CUnit开始了一些工作,除了所有的东西都在一个线程中运行,任何内存错误都会导致单元测试停止运行,这很烦人。

    有一个C单元测试框架,它在一个单独的进程中派生和执行每个测试用例,以便即使在存在核心转储的测试时也执行所有测试: Check

    但是,我害怕这些叉子带来的性能损失(老实说,我没有试过)。但我不会忍受任何单一的测试核心转储:我通常会立即修复它。

    防止单元测试进入核心的一个技巧是 assertion guard ,例如:使用断言来防止使用空指针(例如 minunit ).

    void test_function_returning_a_pointer(void)
    {
        struct_t *theStruct = function_returning_a_pointer();
        MU_ASSERT(theStruct != NULL);
    
        //--- now you can use the pointer 
        MU_ASSERT(theStruct->field1 == 0);
    
        return MU_PASSED;
    }
    

    顺便说一下,我不知道任何C++单元测试框架不会在分割违反的情况下崩溃。

    我还发现编写测试非常困难,但这可能只是单元测试。

    你能详细说明一下你的困难吗?你想测试遗留代码吗?