测试 C++使用测试类对常用类进行编程

发布于 2024-08-28 03:49:16 字数 344 浏览 1 评论 0原文

这可能是一个愚蠢的问题,但我会尽力而为。

我有一个简单的 C++ 程序,我需要为其构建测试。除了我实际使用的类之外​​,我还使用了 2 个类,这些类称为 WebServer 和 BusinessLogicLayer。

为了测试我自己的代码,我制作了这些类的我自己的版本,将虚拟数据提供给我的类以测试它的功能。

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

问候

保罗

P.S.这可能是一个措辞糟糕的问题,但我不知道有什么更好的方式来提出我的问题。

This will probably be a bot of a waffly question but ill try my best.

I have a simple c++ program that i need to build testing for. I have 2 Classes i use besides the one i actually am using, these are called WebServer and BusinessLogicLayer.

To test my own code i have made my own versions of these classes that feed dummy data to my class to test it functionality.

I need to know a way of somehow, via a makefile for instance, how to tell the source code to use the test classes over the normally used classes. The test classes are in a different "tester" c++ file, and the tester c++ file also has its own header file.

Regards

Paul

P.S. This is probably a badly worded question, but i dont know any better way to put my question.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野味少女 2024-09-04 03:49:16

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

You can define abstract base classes that declare the public interfaces for your components, then wire the objects together at runtime (in main() or something else fairly high up in the food chain). In testing, you simply wire up different objects.

酷炫老祖宗 2024-09-04 03:49:16

要使用目录 ${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 
lt; -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。

参考

To build debug and release versions of a program with source code in directories ${SRC_DIR_1} and ${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 
lt; -o $@

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

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

In the Project Configuration dialog, specify the target name as "program_name, program_name_debug". (Replace program_name with the name of your program.)

To build the program, invoke "make debug=X" with X replaced by either 0 or 1.

Reference

清浅ˋ旧时光 2024-09-04 03:49:16

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

无论如何,这会起作用:

real_program: WebServer.o BusinessLogicLayer.o

test_program: tester.o

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

Why does your tester code have a header file of its own? Your test code should have the same interface as the code it emulates, and using the same header file prevents a lot of headaches.

Anyway, this will work:

real_program: WebServer.o BusinessLogicLayer.o

test_program: tester.o

real_program test_program: MyClass.o OtherThings.o
    $(LINK) $^ -o $@
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文