我有一个嵌入式C / C++项目,我想用CppUTest编写单元测试。我要执行的一个简单测试是确保在测试期间调用特定的C函数。

假设我在 function.h 中定义了两个C函数:

void success(void)
{
    // ... Do Something on success
}

void bid_process(void)
{
    bool happy = false;
    // ... processing modifiying 'happy' and setting it to 'true'

    if (happy)
        success(); // Call to success
}

我想测试函数big_process,并且如果不调用success,我希望测试失败。

为此,我在单独的测试文件 test.cpp 中编写了一些CppUTests:
#include <CppUTest/CommandLineTestRunner.h>
#include "CppUTest/TestHarness.h"
#include "CppUTestExt/MockSupport.h"

#ifdef __cplusplus
extern "C"
{
    #include "function.h"
}
#endif
TEST_GROUP(TestGroup)
{
    void teardown()
    {
        mock().clear();
    }
};


TEST(TestGroup, Test_big_process)
{
    mock().expectOneCall("success"); // success should be called by the call to big process
    big_process();
    mock().checkExpectations();
}

我手动检查big_process正常工作,并正在调用success,但现在我希望我的测试能够做到这一点。但是测试失败,并告诉我:
 Mock Failure: Expected call did not happen.
    EXPECTED calls that did NOT happen:
        success -> no parameters

所以我的问题很简单:如何确保在期间 success 被调用?

最佳答案

您正在正确设置模拟期望,但未将模拟连接到success()函数。

这解释了一个类似的问题:https://github.com/cpputest/cpputest/issues/1054

关于c++ - 检查在C++ CppUTest中是否调用了C函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52723810/

10-16 23:25