Общее юнит-тестирование: можно ли издеваться над собственными функциями?(Ceedling / CMock) - PullRequest
0 голосов
/ 25 сентября 2019

Можно ли в принципе проверять функции проверяемого файла?

Например, я хочу протестировать файл self_test.c, состоящий из следующих функций:

#include "self_test.h"

uint8_t function_1(uint8_t argument)
{
    return function_2(argument);
}

uint8_t function_2(uint8_t argument)
{
    return (argument+1);
}

с помощьюТестовый файл в основном выглядит следующим образом:

#include "mock_self_test.h"

void test_function_1(void)
{
    uint8_t input_value = 8;
    stest_function_2_ExpectAndReturn(input_value, 10);
    uint8_t output_value = function_1(input_value);
    TEST_ASSERT_EQUAL_UINT8(10, output_value);
}

и для завершения файл self_test.h:

uint8_t function_1(uint8_t argument);
uint8_t function_2(uint8_t argument);

Когда я это делаю, компилятор возвращает: «error: Function function_1. Calledбольше, чем ожидалось. "

Полагаю, это плохая практика и может не сработать, но, поскольку моя функция_2 довольно велика, это может сэкономить мне массу работы, поскольку я могу тестировать функцию_1 независимо от функции_2.И я работаю над устаревшим кодом, так что, к сожалению, переписать все с улучшенным интерфейсом тестирования невозможно.

Вывод Ceedling:

[==========] Running 1 tests from 1 test cases.
[----------] Global test environment set-up.
[----------] 1 tests from test_self_test.c
[ RUN      ] test_self_test.c.test_function_1
test_self_test.c(22): error: Function function_1.  Called more times than expected.
 Actual:   FALSE
 Expected: TRUE
[  FAILED  ] test_self_test.c.test_function_1 (0 ms)
[----------] 1 tests from test_self_test.c (0 ms total)

1 Ответ

0 голосов
/ 25 сентября 2019

Нет, вы не можете имитировать функции, которые вызываются из одного модуля компиляции.Большинство компиляторов не помещают ссылку на символ вызываемой функции, но прямой (перемещаемый) адрес или смещение в сгенерированный машинный код.Они даже могут оптимизировать вызов, если это возможно.

Вы можете разрезать исходные файлы на более мелкие файлы, что также потребует огромных усилий.Вы можете попытаться автоматизировать это с помощью скрипта.

Видимо, проект для тестирования имеет плохой дизайн программного обеспечения.; -)

...