Подключение CppUTest к интерфейсу C - PullRequest
0 голосов
/ 20 марта 2019

Я использую CppUTest для обработки модульного тестирования с моей библиотекой C.Однако у меня возникла проблема при компиляции тестового файла.

Вот мой Makefile (CPPUTEST_HOME var - переменная окружения):

CPPFLAGS += -I$(CPPUTEST_HOME)/include
CXXFLAGS += -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h
CFLAGS += -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h
LD_LIBRARIES = -L$(CPPUTEST_HOME)/lib -lCppUTest -lCppUTestExt

all:
        c++ -g -Wall $(CPPFLAGS) $(CXXFLAGS) $(CFLAGS) commonTest.cpp -o commonTest $(LD_LIBRARIES)

clean:
        rm -rf *.dSYM commonTest

Когда я запускаю make, выдается следующий вывод:

Undefined symbols for architecture x86_64:
  "_test_common_algos_commonCalloc_wrapper_c", referenced from:
      TEST_common_algos_commonCalloc_Test::testBody() in commonTest-992552.o
  "_test_common_algos_commonMalloc_wrapper_c", referenced from:
      TEST_common_algos_commonMalloc_Test::testBody() in commonTest-992552.o
  "_test_common_algos_commonRealloc_wrapper_c", referenced from:
      TEST_common_algos_commonRealloc_Test::testBody() in commonTest-992552.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1

Мне кажется, это проблема с линковкой.Тем не менее, я не думаю, что я сделал что-то не так в соответствии с руководством :

commonTest.c:

#include "../common.h"
#include "CppUTest/TestHarness_c.h"

void *ptr = NULL;
int list[10] = {1, 2, 32, 33, 2, 5, 7, 3, 9, 34};

TEST_GROUP_C(common_algos)
{

};

TEST_C(common_algos, commonMalloc)
{
  ptr = malloc_c(6);
  CHECK_EQUAL_C_INT(algos_error, ALGOS_OK);
  strncpy(ptr, "Hello", 5);
  CHECK_EQUAL_C_STRING("Hello", ptr);
  free_c(ptr);
}

TEST_C(common_algos, commonCalloc)
{
  ptr = calloc_c(sizeof(int), 10);
  CHECK_EQUAL_C_INT(algos_error, ALGOS_OK);
  memcpy(ptr, list, sizeof(int)*10);
  for (int i = 0; i < 10; i++)
      CHECK_EQUAL_C_INT(list[i], ptr[i]);
  free_c(ptr);
}

TEST_C(common_algos, commonRealloc)
{
  ptr = malloc_c(10);
  CHECK_EQUAL_C_INT(ALGOS_OK, algos_error);
  memcpy(ptr, list, sizeof(int)*10);
  ptr = realloc_c(ptr, 20);
  CHECK_EQUAL_C_INT(ALGOS_OK, algos_error);
  memcpy(ptr + 10, list, sizeof(int)*10);
  for (int i = 9; i < 19; i++)
      CHECK_EQUAL_C_INT(list[i-9], ptr[i]);
  free_c(ptr);
}

commonTest.cpp:

#include "CppUTest/CommandLineTestRunner.h"
#include "CppUTest/TestHarness_c.h"

TEST_GROUP_C_WRAPPER(common_algos)
{

};

TEST_C_WRAPPER(common_algos, commonMalloc);
TEST_C_WRAPPER(common_algos, commonCalloc);
TEST_C_WRAPPER(common_algos, commonRealloc);


int main(int ac, char **av)
{
 return RUN_ALL_TESTS(ac, av);
}

Наконец, моя структура каталогов:

common
  |______ common.c
  |
  |______ common.h
  |
  |______ test
           |
           |____commonTest.c
           |
           |____commonTest.cpp

В некоторых случаях я не программист на C ++, и у меня нет опыта использования CppUTest, так что терпите меня.

Спасибо за любую помощь и не стесняйтесь задавать вопросы.

...