Это простой вопрос, я верю … Я хочу переменную 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);
}
setup()
вызывается перед запуском каждого TEST
Помни что модульные тесты должны пройти или провалиться независимо от других тестов.
Вы должны добавить определение для статического члена:
TEST_GROUP(LedDriverTests)
{
static uint16_t virtualLeds;
// ...
};
// Definition of static data
uint16_t TEST_GROUP_CppUTestGroupLedDriverTests::virtualLeds;
// ...