You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2019+Resharper环境下Catch2与Doctest单元测试无法运行求助

解决Visual Studio 2019 + ReSharper下Catch2/Doctest测试显示"Inconclusive Test not run"的问题

我之前也踩过类似的坑,结合你的环境和问题描述,核心问题大概率出在Win32 GUI项目的入口与测试框架的入口冲突,以及项目配置的子系统设置上。下面是一步步的解决办法:

1. 修改项目子系统配置

Win32项目默认是GUI子系统(用wWinMain作为入口),而Catch2/Doctest这类测试框架需要控制台子系统才能正常执行测试。你需要调整项目属性:

  • 右键你的测试项目 → 选择「属性」
  • 导航到「链接器」→「系统」
  • 将「子系统」从Windows (/SUBSYSTEM:WINDOWS)改为Console (/SUBSYSTEM:CONSOLE)

2. 调整代码结构,避免入口冲突

测试框架通过宏(比如Catch2的CATCH_CONFIG_MAIN)生成自己的main入口,而你的项目里同时存在wWinMain,这会导致入口点冲突,测试框架无法正确初始化:

修改后的Catch2代码示例

Engine.cpp

#include "pch.h"
#include "..\Catch_2_7_2.h"
#include "Engine.h"

// 如果这是专门的测试项目,建议暂时注释掉wWinMain(或者把它移到生产代码项目中)
// int wWinMain(HINSTANCE ghInst, HINSTANCE ghPrevInst, LPWSTR gupCmdLine, int gsdCmdShowFlag) { return 0; };

int test() { return 3; }

TEST_CASE("CatchTest Test") { 
    REQUIRE(test() == 3); 
}

DocTest.cpp

// 确保这个宏只在一个cpp文件中定义,不要重复
#define CATCH_CONFIG_MAIN
#include "..\Catch_2_7_2.h"

如果后续切换回Doctest,同样要保证DOCTEST_CONFIG_IMPLEMENT只在一个cpp文件中定义,并且移除或注释掉wWinMain。

3. 验证ReSharper的测试配置

虽然你已经勾选了测试支持,但还是要确认测试运行的架构匹配:

  • 右键测试项目 → 选择「ReSharper」→「检查测试配置」
  • 确认测试会话的目标架构是x64,和你的项目配置一致

4. 清理并重建解决方案

旧的编译产物可能会干扰测试运行,执行以下步骤:

  • 菜单栏选择「生成」→「清理解决方案」
  • 然后重新生成整个解决方案

完成这些步骤后,再尝试运行测试,应该就能正常执行了。

内容的提问来源于stack exchange,提问作者pro3carp3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:38:13