首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual中用Catch2进行单元测试的最佳实践

Visual中用Catch2进行单元测试的最佳实践
EN

Stack Overflow用户
提问于 2020-01-08 11:57:08
回答 1查看 8.2K关注 0票数 6

我刚接触过C++中的单元测试,想得到一些关于这方面的建议。我使用VisualStudio2019进行开发,选择Catch2作为测试库,还安装了用于Catch2的测试适配器。

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

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

当我尝试第一种方法时,不会发现测试,除非我注释掉了项目的main()函数。使用第二种方法,虽然我为头文件设置了正确的相对路径并引用了测试项目中的主项目,但我得到了一些未解决的类方法的外部符号错误:

代码语言:javascript
复制
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进行单元测试的正确方法,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-12 13:08:34

好的,我想我找到了一个合适的工作流来使Catch2测试在VisualStudio2019中工作:

  1. Create是一个新的项目,它采用了被测试项目(PuT)的解决方案。这将是我们的测试project.
  2. Add --测试project.
  3. In测试项目中对PuT的引用,创建一个源文件,并在it

中放置以下行

代码语言:javascript
复制
#define CATCH_CONFIG_MAIN
#include "path_to_catch2/catch.hpp"

  1. Write一些测试。您可以拥有任意多个包含测试的源文件,但请记住,其中只有一个必须具有#define CATCH_CONFIG_MAIN测试项目配置属性,设置如下设置:
    • Linker -> General ->附加库目录--在这里添加到put的目标文件目录的路径。在这里,将PuT的目标文件名(不是路径,仅为.OBJ文件的名称!)放在测试中使用的分号分隔。例如,如果您想测试MyCode.h中声明的一些代码,请将MyCode.obj文件名放在这里。当您从setting.

引用更多的头文件时,不要忘记更新这个PuT

  1. Open测试Explorer.
  2. Add到解决方案根文件夹的.runsettings文件。最小配置如下所示:

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
        <Catch2Adapter>
            <FilenameFilter>^Test_</FilenameFilter>
        </Catch2Adapter>
    </RunSettings>

其中<FilenameFilter>控件筛选器用于测试项目文件名。在这个特殊的例子中,只有在名字以"Test_“开头的项目中才会发现测试。

  1. Select .runsettings文件在测试->配置运行设置->选择解决方案宽运行设置文件。您可以拥有具有不同配置的多个.runsettings文件,在这里您可以在任何.runsettings(解决方案)上切换它们以发现测试.

现在,您应该在中看到您的测试。

一些有用的链接:

https://learn.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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59645381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档