CppUtest разделяет ресурсы между тестами, неопределенная ссылка

Это простой вопрос, я верю … Я хочу переменную 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'

Есть идеи?

0

Решение

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);
}

setup() вызывается перед запуском каждого TEST

Помни что модульные тесты должны пройти или провалиться независимо от других тестов.

1

Другие решения

Вы должны добавить определение для статического члена:

TEST_GROUP(LedDriverTests)
{
static uint16_t virtualLeds;

// ...
};

// Definition of static data
uint16_t TEST_GROUP_CppUTestGroupLedDriverTests::virtualLeds;

// ...
0