什么是组织C++;要进行单元测试的项目? 我想知道什么是组织C++项目和类的有效方法。我读过很多与单元测试相关的文章,但找不到实际的例子

什么是组织C++;要进行单元测试的项目? 我想知道什么是组织C++项目和类的有效方法。我读过很多与单元测试相关的文章,但找不到实际的例子,c++,visual-studio,code-organization,C++,Visual Studio,Code Organization,以下是我收集的一些方法: 方法A 项目A:包含项目C中类的应用程序(.exe)项目 项目B:单元测试(.exe)项目,“包括”项目C中的类 项目C:保存项目A使用的所有类的静态库(.lib)项目 方法B 项目A:应用程序(.exe)项目,其内部包含所有类 项目B:与项目A中的类“链接”的单元测试(.exe)项目 方法C(来自米格尔) 只有一个项目,有三种配置: 调试:在调试模式下生成应用程序.exe 发布:在发布模式下生成应用程序.exe 测试:构建单元测试框架,将应用程序的main

以下是我收集的一些方法:

方法A

  • 项目A:包含项目C中类的应用程序(.exe)项目
  • 项目B:单元测试(.exe)项目,“包括”项目C中的类
  • 项目C:保存项目A使用的所有类的静态库(.lib)项目
方法B

  • 项目A:应用程序(.exe)项目,其内部包含所有类
  • 项目B:与项目A中的类“链接”的单元测试(.exe)项目
方法C(来自米格尔)

  • 只有一个项目,有三种配置:
    • 调试:在调试模式下生成应用程序.exe
    • 发布:在发布模式下生成应用程序.exe
    • 测试:构建单元测试框架,将应用程序的main()替换为单元测试main()

哪种方式更合适?您还有其他建议吗?

实际上没有太大区别,因为您可以始终将exe编译为静态库,并链接到单元测试。从概念上讲,方法A稍微干净一点,但没有任何东西阻止您使用方法B。它基本上归结为您的构建系统更容易做到的事情。

我认为将应用程序的类移动到静态库不会有多大好处。您还应该考虑在编译测试时需要修改类,例如通过添加应用程序不需要的其他便利方法,所以最终将类放在库中可能没有帮助,因为在运行测试时需要这些类的特殊版本。

我想提出以下建议,作为比您的方法a和B更好的选择:

方法C

  • 只有一个项目,有三种配置:
    • 调试:在调试模式下生成应用程序.exe
    • 发布:在发布模式下生成应用程序.exe
    • 测试:构建单元测试框架,将应用程序的main()替换为单元测试main()

如果您认为需要,也可以将测试目标分为调试和发布。

我以前很好地使用了第一种方法。将大部分代码放在静态库项目中,让主可执行项目只包含主函数,让测试和测试主函数放在第三个项目中。这两个可执行项目将链接到静态库并重用代码

这样做的主要好处是:

  • 正在测试的代码与应用程序中使用的版本完全相同
  • 您可以测试调试和发布配置,以确保两者都按预期工作。(您可以推断可能需要的任何配置的调试和发布。)
  • 由于在两个可执行项目中使用相同的生成库,因此生成时间被最小化
  • 可以让构建系统同时构建测试和主可执行文件,也可以在构建后运行测试可执行文件
谢谢,方法C意味着我必须:1。将单元测试与#ifdef TEST(生成#ifdef TEST)环绕在一起#恩迪夫。2.用#ifndef TEST_BUILD#环绕应用程序代码#恩迪夫。对吗?我可以将此方法添加到问题中吗?我将只使用两个源文件,一个是应用程序的main(),另一个是单元测试main()。您可以在每个配置上编译正确的配置。是的,请随时根据我的建议更新您的问题。我不会这样做,因为您需要选择要测试配置遵循的(调试/发布)配置,或者创建两个测试配置,一个用于调试,一个用于发布。两个配置test/debug和test/release有什么不对?如果您使用建议的任何其他方法,这都是完全相同的。我的主要意见是,您需要将两个配置与其父配置保持同步,即添加/删除&启用/禁用文件,这将变得相当复杂。拥有独立的项目意味着配置可以简单得多。另外,从概念上讲,拥有单独的测试项目比相同的项目基于不同的配置发出不同的东西更简单。