gpt4 book ai didi

c++ - 在 C++ 中进行简单测试

转载 作者:行者123 更新时间:2023-11-30 02:57:39 26 4
gpt4 key购买 nike

我需要用 C++ 做一些简单的测试(以前从未做过)。我在 visual studio 2010 工作,我遇到了内置的测试选项卡。但我真的不喜欢它,它对我来说似乎太复杂了。

我只需要一个自定义的 main() 方法,这样我就可以启动快速控制台应用程序并查看类是否按预期执行。

我决定通过创建一个包装启动器文件来使用预处理器定义来克服这个问题,这将是程序的主要起点。

所以,我的 main.cpp 文件包含:

#define DESIRED_TEST "some_test.cpp"

#ifndef DESIRED_TEST
#include "main_program.cpp"
#else
#include DESIRED_TEST
#endif

main_program.cpp 是运行整个程序的文件(其中有 main 方法)。如您所见,如果我定义 DESIRED_TEST 并分配一个包含文件,则不包含 main_program.cpp 并且应该只构建测试文件(其中也有 main 方法)。但是,在编译时我得到了这个输出:

1>main.obj : error LNK2005: _main already defined in some_test.obj
1>main_program.obj : error LNK2005: _main already defined in some_test.obj
1>C:\....... : fatal error LNK1169: one or more multiply defined symbols found

我应该如何告诉编译器程序的主要起点是 main.cpp 并且它应该只根据该文件编译和链接,而忽略所有其他目标文件中的多个定义?


以下是我如何克服这个问题(main.cpp 文件):

#define DESIRED_TEST "some_test.h"    

#ifndef DESIRED_TEST

int main(int argc, char *argv[])
{
// main program code here
}

#else

#include DESIRED_TEST

int main() {
FUNCTION_CALL();
}

#endif

some_test.h 文件:

void some_test();
#define FUNCTION_CALL some_test

现在我需要的是为每个测试创建新的 some_test.h 和 some_test.cpp 文件并定义函数调用。

我不想在visual studio学习测试标准的原因是因为我这个级别的项目测试真的很简单。我将来可能需要学习它,但当事情变得非常深入和复杂时,我会学习它。

最佳答案

VC 将 .cpp 文件视为源代码,应该单独编译,不管它们是否包含在某处。这是常见的行为,您最好不要尝试更改它。

相反,您可以

  • 将您的 .cpp 文件重命名为 .h.inc 并包含头文件
  • 将代码包裹在 .cpp 中,就像 guard 一样

    //some_test.cpp
    #ifdef DESIRED_TEST

    //code

    #endif


    //main_program.cpp
    #ifndef DESIRED_TEST

    //code

    #endif

    那么你不应该在任何地方包含.cppDESIRED_TEST 可以在通用 header 或项目设置中定义。

  • 但最好的办法是学习 Visual Studio 提供的测试框架并使用它。

关于c++ - 在 C++ 中进行简单测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com