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
相关产品推荐
相关产品推荐

