Тестирование программы на C ++ с тестированием классов над обычно используемыми классами - PullRequest
0 голосов
/ 07 апреля 2010

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

У меня есть простая программа на С ++, для которой мне нужно построить тестирование. У меня есть 2 класса, которые я использую, кроме того, который я на самом деле использую, они называются WebServer и BusinessLogicLayer.

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

Мне нужно каким-то образом узнать, например, через make-файл, как указать исходному коду использовать тестовые классы над обычно используемыми классами. Классы тестов находятся в другом файле "++" тестера, а в файле тестера c ++ также есть собственный заголовочный файл.

Привет

Пол

P.S. Это, вероятно, плохо сформулированный вопрос, но я не знаю лучшего способа поставить мой вопрос.

Ответы [ 3 ]

0 голосов
/ 07 апреля 2010

Для создания отладочной и выпускной версий программы с исходным кодом в каталогах $ {SRC_DIR_1} и $ {SRC_DIR_2}:

CXX      := g++
CPPFLAGS  = ...
CXXFLAGS  = ...

SRC_DIR_1 := ...
SRC_DIR_2 := ...

ifeq (${debug},1)
  BIN_DIR  := ./obj_debug
  CXXFLAGS += -g
else
  BIN_DIR  := ./obj_release
  CXXFLAGS += -DNDEBUG
endif

# Make sure that the directory exists.
TEMP := ${shell test -d ${BIN_DIR} || mkdir ${BIN_DIR}}

# Tell make to search each directory
VPATH := ${SRC_DIR_1}:${SRC_DIR_2}

# You can modify this to use a suffix other than .cc
${BIN_DIR}/%.o : %.cc
    ${CXX} ${CPPFLAGS} ${CXXFLAGS} -c $< -o $@

# Build the requested version of the program.
ifeq (${debug},1)
  default: program_name_debug
else
  default: program_name
endif

tidy::
    @${RM} -r ./obj_*

В диалоговом окне «Конфигурация проекта» укажите имя цели как «имя_программы, имя_программы_дебуг». (Замените имя_программы названием вашей программы.)

Чтобы собрать программу, вызовите "make debug = X" с заменой X на 0 или 1.

Ссылка

0 голосов
/ 07 апреля 2010

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

В любом случае это будет работать:

real_program: WebServer.o BusinessLogicLayer.o

test_program: tester.o

real_program test_program: MyClass.o OtherThings.o
    $(LINK) $^ -o $@
0 голосов
/ 07 апреля 2010

Вы можете определить абстрактные базовые классы, которые объявляют открытые интерфейсы для ваших компонентов, а затем соединять объекты вместе во время выполнения (в main() или что-то еще достаточно высоко в пищевой цепи). При тестировании вы просто подключаете разные объекты.

...