CppUtest在测试之间共享资源,未定义引用

CppUtest shared resources between tests, undefined reference

本文关键字:未定义 引用 共享资源 之间 测试 CppUtest      更新时间:2023-10-16

我相信这是一个简单的问题。。。我希望变量virtualLeds在测试组LedDriverTests中的所有测试之间共享,这是代码:

#include "CppUTest/TestHarness.h"
#include <stdint.h>
extern "C"
{
    #include "led_driver.h"
}
TEST_GROUP(LedDriverTests)
{
    static uint16_t virtualLeds;
    void setup()
    {
    }
    void teardown()
    {
    }
    void expect(void)
    {
    }
    void given(void)
    {
    }
};
TEST(LedDriverTests, AllOffAtInitialization)
{
    // Set all the bits to 1, the LEDs are turned ON by hardware.
    virtualLeds = 0xFFFF;
    led_driver_create(&virtualLeds);
    LONGS_EQUAL(0x0000, virtualLeds);
}
TEST(LedDriverTests, TurnOnLedOne)
{
    led_driver_turn_on(1);
    LONGS_EQUAL(0x0001, virtualLeds);
}
TEST(LedDriverTests, TurnOffLedOne)
{
    led_driver_turn_on(1);
    led_driver_turn_off(1);
    LONGS_EQUAL(0x0000, virtualLeds);
}

当我尝试编译时,我得到以下错误:

undefined reference to `TEST_GROUP_CppUTestGroupLedDriverTests::virtualLeds'

有什么想法吗?

TEST_GROUP宏创建一个结构,然后在该结构中创建一个静态成员。请参阅有关结构中静态成员的详细信息。简而言之,这就是为什么您无法以这种方式访问virtualLeds = 0xFFFF;

查看您的代码。我想你想做的是:

TEST_GROUP(LedDriverTests)
{
    uint16_t virtualLeds;
    void setup()
    {
        // Set all the bits to 1, the LEDs are turned ON by hardware.
        virtualLeds = 0xFFFF;
    }
};
TEST(LedDriverTests, AllOffAtInitialization)
{
    led_driver_create(&virtualLeds);
    LONGS_EQUAL(0x0000, virtualLeds);
}
TEST(LedDriverTests, TurnOnLedOne)
{
    led_driver_turn_on(1);
    LONGS_EQUAL(0x0001, virtualLeds);
}
TEST(LedDriverTests, TurnOffLedOne)
{
    led_driver_turn_on(1);
    led_driver_turn_off(1);
    LONGS_EQUAL(0x0000, virtualLeds);
}

在运行每个TEST 之前调用setup()

请记住,单元测试应该独立于其他测试通过或失败。

您必须为静态成员添加一个定义:

TEST_GROUP(LedDriverTests)
{
    static uint16_t virtualLeds;
    // ...
};
// Definition of static data
uint16_t TEST_GROUP_CppUTestGroupLedDriverTests::virtualLeds;
// ...