设置单元测试需要多少个项目

How many projects are needed to setup an Unit test

本文关键字:项目 多少 单元测试 设置      更新时间:2023-10-16

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

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

有人有想法吗?

多谢!

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

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

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

你所描述的是一个真正的灾难等待发生的问题。 单元测试需要测试应用程序的代码,而不是应用程序代码的副本。 但你也不应该把它们放在一个项目中。

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

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

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

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

如果您只有一个主 exe 项目,您可以通过为您的解决方案创建一个新目标"UnitTest"来执行一些单元测试,并将主 exe 项目的属性"配置类型"设置为"静态库 (.lib)"。

这种方法的缺点是,如果您想构建 exe 或进行一些单元测试,则必须切换目标。所以我也建议@doctorlove的答案。