Dav*_*dZi 4 unit-testing visual-c++ catch-unit-test catch2
我是 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)
Run Code Online (Sandbox Code Playgroud)
如果有人向我展示在 VS 中使用 Catch2 进行单元测试的正确方法,我将不胜感激。
好的,我想我找到了一个合适的工作流程来使 Catch2 测试在 Visual Studio 2019 中工作:
#define CATCH_CONFIG_MAIN
#include "path_to_catch2/catch.hpp"
Run Code Online (Sandbox Code Playgroud)
#define CATCH_CONFIG_MAIN声明。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Catch2Adapter>
<FilenameFilter>^Test_</FilenameFilter>
</Catch2Adapter>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
where<FilenameFilter>控制测试项目文件名的过滤器。在此特定示例中,只会在名称以“Test_”开头的项目中发现测试。
现在您应该在测试资源管理器中看到您的测试。
一些有用的链接:
https://github.com/JohnnyHendriks/TestAdapter_Catch2/blob/master/Docs/Walkthrough.md