【问题标题】:Best practices for Unit testing with Catch2 in Visual Studio在 Visual Studio 中使用 Catch2 进行单元测试的最佳实践
【发布时间】:2020-01-08 11:57:08
【问题描述】:

我是 C++ 单元测试的新手,想获得一些建议。 我使用 Visual Studio 2019 进行开发,我选择了 Catch2 作为我的测试库,我还安装了 Catch2 的测试适配器。

我在 GitHub 上阅读了 Catch2 和 Catch2 测试适配器的文档,但我仍然无法找到在 Visual Studio 中使用单元测试的正确方法。

假设我已经有一个项目,其中包含一些类,并且我想测试这些类。 我应该将带有测试代码的文件放在同一个项目中,还是应该在解决方案中创建新的测试项目?

当我尝试第一种方法时,除非我注释掉项目的 main() 函数,否则测试资源管理器不会发现测试。 使用第二种方法,我的类方法出现了一堆未解决的外部符号错误,尽管我设置了正确的头文件相对路径并从测试项目中引用了主项目:

LNK2019 unresolved external symbol "public: bool __thiscall MyClass::Check(int,int)" (?Check@MyClass@@QAE_NHH@Z) referenced in function "void __cdecl ____C_A_T_C_H____T_E_S_T____0(void)" (?____C_A_T_C_H____T_E_S_T____0@@YAXXZ)

如果有人告诉我在 VS 中使用 Catch2 进行单元测试的正确方法,我将不胜感激。

【问题讨论】:

  • 回复:although I set correct relative paths to header files - 这解决了undefined... 类型的错误;你有LINK 问题。检查Catch2 上的文档 - 您是否还应该将您的 cpp 文件编译到该测试项目中?

标签: unit-testing visual-c++ catch-unit-test catch2


【解决方案1】:

好的,我想我找到了一个合适的工作流来让 Catch2 测试在 Visual Studio 2019 中工作:

  1. 使用被测项目 (PuT) 的解决方案创建一个新项目。这将是我们的测试项目。
  2. 从测试项目中添加对 PuT 的引用。
  3. 在 Test 项目中,创建一个源文件并将以下行放入其中:
#define CATCH_CONFIG_MAIN
#include "path_to_catch2/catch.hpp"
  1. 编写一些测试。您可以拥有任意数量的带有测试的源文件,但请记住,其中只有一个必须具有 #define CATCH_CONFIG_MAIN 声明。
  2. 在测试项目配置属性中,设置以下设置:
    • 链接器 -> 常规 -> 附加库目录 - 在此处添加 PuT 的目标文件目录的路径。
    • Linker -> Input -> Additional Dependencies - 在这里,放置 PuT 的目标文件名称(不是路径,只是 .OBJ 文件的名称!),用分号分隔,用于测试。例如,如果您想测试在 MyCode.h 中声明的某些代码,请将 MyCode.obj 文件名放在这里。当您从 PuT 中引用更多头文件时,请不要忘记更新此设置。
  3. 打开测试资源管理器。
  4. 将 .runsettings 文件添加到解决方案根文件夹。最小配置如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
        <Catch2Adapter>
            <FilenameFilter>^Test_</FilenameFilter>
        </Catch2Adapter>
    </RunSettings>

&lt;FilenameFilter&gt; 控制测试项目文件名的过滤器。在此特定示例中,仅会在名称以“Test_”开头的项目中发现测试。

  1. 在测试 -> 配置运行设置 -> 选择解决方案范围的运行设置文件中选择此 .runsettings 文件。您可以拥有多个不同配置的 .runsettings 文件,在这里您可以随时切换它们。
  2. 重建解决方案以发现测试。

现在您应该在测试资源管理器中看到您的测试。


一些有用的链接:

https://docs.microsoft.com/en-us/visualstudio/test/how-to-use-microsoft-test-framework-for-cpp?view=vs-2019

https://github.com/JohnnyHendriks/TestAdapter_Catch2/blob/master/Docs/Walkthrough.md

【讨论】:

  • 我目前正在寻找解释为什么所有这些都是必要的,而不仅仅是如何让它工作。我的问题可以在这里找到:stackoverflow.com/questions/64459095/…
  • 您好,我尝试了您描述的所有方法,但我的测试资源管理器仍然没有显示任何内容。我下载了github.com/JohnnyHendriks/TestAdapter_Catch2/tree/main/… 并执行,测试浏览器确实显示了正确的结果。但是我自己的项目无法显示任何内容。可能的原因是什么?
  • 您好,请问您如何“从测试项目中添加对 PuT 的引用”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 2021-09-08
相关资源
最近更新 更多