【问题标题】:How many projects are needed to setup an Unit test设置单元测试需要多少个项目
【发布时间】:2013-10-21 20:30:23
【问题描述】:

直接问题:我必须在我的工作区中有两个项目来测试一个应用程序吗?一个用于应用程序,另一个用于单元测试。或者我可以只有一个项目吗?

问题描述: 现在我正在使用 MinGW 在 Eclipse C++ 中编写一个小应用程序,我想使用 Boost Test 库和 C/C++ 单元对其进行测试。我已经阅读了手册和教程,他们说 Boost 创建了一个主要功能。这意味着我必须有 2 个不同的项目(一个是应用程序,另一个是测试)。但是在这种情况下,当我对代码进行更改时,我必须执行两次(在两个项目中)。它看起来很烦人,所以我坚持认为我可能是错的,并且有一种方法可以直接在单元测试中使用来自应用程序的源代码,可能是一个独特的项目或单元测试项目的一些特定配置。

有人有想法吗?

非常感谢!

【问题讨论】:

  • 我总是为每个库使用 1 个项目 + 每个可执行文件使用 1 个项目 + 为我的单元测试使用 1 个或更多项目。是的,就像一个答案说您可以将单元测试放在主可执行文件中并使用命令行开关来激活单元测试,但是我也相信这不是最好的。您是否希望您的用户能够执行单元测试,或者您是否有一些机制可以在您发布应用程序时禁用它们。

标签: c++ eclipse unit-testing boost


【解决方案1】:

首先,您可以将所有测试与代码放在同一个项目中,但这可能不是最好的计划。您的 main 函数必须接受参数才能在测试和实际行为之间切换。

我经常以三个项目结束:一个库、我的主 exe 和测试项目。 如果您不想制作第三个项目,您可以将相同的 cpp 文件添加到测试和主 exe,但从长远来看,制作第三个库项目可能是明智的。

其次,您可以构建 boost 测试,以便您可以根据需要编写自己的 main。如果您两次更改相同的代码,这是自找麻烦。如果您尝试维护代码的副本以对其进行测试,那么您将犯错误。不要这样做。

【讨论】:

    【解决方案2】:

    您所描述的问题确实是一场等待发生的灾难。您的单元测试需要测试您的应用程序代码,而不是您的应用程序代码的副本。但是你也不应该把它们拼凑成一个项目。

    想一想将测试包含在主代码中会带来哪些坏事。您可能会遇到名称冲突,您的单元测试可能会意外链接到您的生产可执行文件并随其一起发布,并且您可能会执行一些完全无效测试合法性的做法,例如 #ifdef UNIT_TESTif (testing == true) {...} 之类的语句。如果您的单元测试没有测试您实际编译并准备好发布的生产代码,那么它们就无法帮助您证明您的代码已准备好生产。

    相反,您应该强烈希望拥有一种使您的代码易于理解、易于测试、易于构建和易于维护的项目组织。为此,您应该需要单独的项目来隔离您的代码、单元测试和生产包装。

    我强烈建议按照医生的建议实现一个包含所有程序逻辑的更大的库项目,然后创建一个单独的项目,其中包含一个非常薄的 main() 函数,该函数只调用你真正逻辑所在的静态库。然后创建包含所有单元测试的第三个项目。测试项目需要链接到您的库中,此外它还应该包含自己的main() 以执行测试。

    使用这种结构,您的解决方案的一个构建应该为您做几件事。它会首先编译库,然后编译并链接单元测试,然后运行您的单元测试,只有当它们都通过时,它才会编译并将生产项目与您的库链接。这样的组织结构使您的代码非常容易测试(它会在每次构建时测试自己!)并且构建非常高效(您只需构建一次逻辑和测试),此外它还可以帮助所有开发人员了解在哪里找到测试与. 在哪里找到代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      相关资源
      最近更新 更多