【问题标题】:Should I write my C++ code as a static or dynamic library if I want to test it?如果我想测试它,我应该将我的 C++ 代码编写为静态库还是动态库?
【发布时间】:2025-12-07 16:25:02
【问题描述】:

我正在 Visual Studio 中开发一个 C++ 项目,并希望使用 Google Test 对其进行测试。

为此,我构建了一个包含三个项目的解决方案:

  1. 代码项目作为控制台应用程序。
  2. Google Test 作为静态库。
  3. 将项目作为控制台应用程序进行测试。

我在代码项目中写了代码,在测试项目中进行了测试。

当我尝试构建解决方案时,我遇到了一个 lnk2019 错误,当我将类移动到测试项目时该错误停止发生(但这不是我想要的)。

我了解到最好的方法是将类编写为库,这样我就可以在(代码和测试)项目中使用它们。

我应该将其作为静态库还是作为 DLL(以及为什么)?

也欢迎其他解决方案。

【问题讨论】:

  • 将代码编写为静态库还是动态库并不重要。如果你只能测试其中一个,那对于需要编写另一种类型的每个人来说都是非常糟糕的!根据您对项目设计的实际需要/想要的内容选择静态或动态库。然后,弄清楚如何解决the linker error,以便您进行测试。
  • 创建一个静态库,然后创建第二个项目,从第一个项目构建一个动态库。现在你两个都有了。
  • 测试您打算交付的版本。如果您要交付动态库,请使用动态库进行测试。
  • 如果你做一个静态库;您需要为库提供生产代码项目,前提是在构建应用程序时设置并解析所有路径。如果您制作动态库,他们将需要 *.dll 及其所在位置。通常这些类型的库的位置是在 IDE 中设置的,用于链接和构建或通过使用安装程序应用程序。
  • 谢谢!目前尝试了静态库,我的示例测试似乎工作正常,不再出现 lnk2019 错误。

标签: c++ visual-studio unit-testing googletest


【解决方案1】:

这里要理解的关键点:你把事情倒退了。

做出此决定是为了“更轻松”地进行测试。您首先必须了解交付的“生产要求”。您创建一个静态库,如果这最适合您的产品。如果没有,则创建一个动态库。

为了测试,您可以处理所选的“交付格式”;或者你想一个简单的方法让你构建一个不同的东西进行测试(尽管不鼓励这样做,因为你想测试你的产品,别无他法)。

不要误会我的意思:为测试而设计很重要;但是您要求的决定应该由您的生产要求驱动!

换句话说:您的产品的“外形”应取决于产品要求,而不应由您的测试设置决定。

【讨论】:

  • 感谢您帮助我重新整理思路。
  • 感谢@GhostCat!
最近更新 更多