У меня возникли проблемы с составлением любой разумной структуры для модульного тестирования вспомогательных/статических функций модуля. Почти весь этот модуль является статическими функциями, и у него много его, поэтому я стараюсь не ставить все мои тесты в один и тот же файл. Специфическое (большое количество) ошибок: /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
Как структурировать статические функции в C?
Но меня интересует общий подход, который будет скомпилирован.
из командной строки, первая установка Куните:
# Install cunit
sudo apt-get install libcunit1 libcunit1-doc libcunit1-dev
В module_a.c
:
#include <stdio.h>
int main(void)
{
// Do the real thing
printf("The number 42: %d\n", get_42());
printf("The number 0: %d\n", get_0());
return 0;
}
static int32_t get_42(void)
{
return 42;
}
static int32_t get_0(void)
{
return 42;
}
В module_a_tests.c
:
#define UNIT_TEST
#include "module_a.c"
#include "CUnit/Basic.h"
#ifdef UNIT_TEST
int set_up(void)
{
return 0;
}
int tear_down(void)
{
return 0;
}
void run_good_fn(void)
{
CU_ASSERT(42 == get_42());
}
void run_bad_fn(void)
{
CU_ASSERT(0 == get_0());
}
int main(void)
{
CU_pSuite p_suite = NULL;
// Initialize
if (CU_initialize_registry() != CUE_SUCCESS) {
return CU_get_error();
}
p_suite = CU_add_suite("First Suite", set_up, tear_down);
if (p_suite == NULL) {
goto exit;
}
CU_basic_set_mode(CU_BRM_VERBOSE);
// Add tests
if (CU_add_test(p_suite, "Testing run_good_fn", run_good_fn) == NULL) {
goto exit;
}
if (CU_add_test(p_suite, "Testing run_bad_fn", run_bad_fn) == NULL) {
goto exit;
}
// Run the tests
CU_basic_run_tests();
exit:
CU_cleanup_registry();
return CU_get_error();
}
#endif
Related:
Конечно, в 'module_a.c' вам не следует начинать с '#define UNIT_TEST', как это должно быть установлено в тестовом файле, включая его? –
Да. Это означает, что module_a.c не должен иметь основной. Редактирование теперь ... – tarabyte