使用通常使用的类上的测试类测试C ++程序

时间:2010-04-07 11:57:35

标签: c++ gcc makefile g++

这可能是一个狡猾问题的机器人,但是我会尽力而为。

我有一个简单的c ++程序,我需要构建测试。除了我实际使用的那个之外,我还有2个类,它们被称为WebServer和BusinessLogicLayer。

为了测试我自己的代码,我已经创建了我自己的这些类的版本,它们将虚拟数据提供给我的类来测试它的功能。

我需要知道某种方式,例如,通过makefile,如何告诉源代码使用测试类而不是常用的类。测试类位于不同的“tester”c ++文件中,测试者c ++文件也有自己的头文件。

此致

P.S。这可能是一个措辞严厉的问题,但我不知道有任何更好的方式提出我的问题。

3 个答案:

答案 0 :(得分:0)

您可以定义为组件声明公共接口的抽象基类,然后在运行时将对象连接在一起(在main()或食物链中相当高的其他位置)。在测试中,您只需连接不同的对象。

答案 1 :(得分:0)

使用目录$ {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_*

在“项目配置”对话框中,将目标名称指定为“program_name,program_name_debug”。 (将program_name替换为程序名称。)

要构建程序,请调用“make debug = X”,将X替换为0或1.

Reference

答案 2 :(得分:0)

为什么您的测试人员代码有自己的头文件?您的测试代码应该与它模拟的代码具有相同的接口,并且使用相同的头文件可以防止很多麻烦。

无论如何,这将有效:

real_program: WebServer.o BusinessLogicLayer.o

test_program: tester.o

real_program test_program: MyClass.o OtherThings.o
    $(LINK) $^ -o $@