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

Windows端VS无法在远程Linux虚拟机上运行Catch2单元测试求助

解决Visual Studio远程Linux环境下Catch2测试适配器的EndOfStreamException问题

问题背景

在Windows的Visual Studio 2022中管理Linux C++项目,尝试用Catch2做单元测试,已完成以下操作:

  • 现有Linux控制台C++项目可在远程Ubuntu虚拟机正常编译、运行、调试;
  • 新增的Linux控制台测试项目包含Catch2合并源码(catch2_amalgamated.cpp和catch2_amalgamated.hpp),测试用例可在VS中远程编译,且在Linux命令行运行测试程序能得到预期结果;
  • 安装了Test Adapter for Catch2,在解决方案目录创建catch2.runsettings并按官方配置(此前Windows本地项目使用正常);
  • 按官方文档配置了VS远程测试环境。

但打开Test Explorer时抛出异常:System.IO.EndOfStreamException: Expected 20 bytes but only received 0 before the stream ended.

环境信息:

  • 本地:Windows 10 Pro 22H2,Visual Studio Pro 2022 v17.8.2(64位);
  • 远程:Ubuntu 22.04.3 LTS虚拟机,已安装最新编译工具和OpenSSH;
  • 连接方式:SSH

排查与解决建议

1. 修正catch2.runsettings的路径配置

确保TestExecutable和TestAdapterPath使用远程Linux虚拟机的绝对路径,而非Windows路径。示例配置:

<RunSettings>
  <Catch2Adapter>
    <TestExecutable>/home/your-user/build/TestProject/Debug/TestProject</TestExecutable>
    <TestAdapterPath>/home/your-user/.nuget/packages/catch2.testadapter/3.4.0/build/netstandard2.0</TestAdapterPath>
  </Catch2Adapter>
</RunSettings>

禁止使用C:\开头的路径或相对路径,必须是Linux系统可识别的绝对路径

2. 强制测试程序输出适配器兼容格式

Catch2适配器依赖特定输出格式,可通过两种方式配置:

  • 在测试项目的编译选项中添加:-DCATCH_CONFIG_CONSOLE_WIDTH=0
  • 在catch2.runsettings中添加命令行参数:
<RunSettings>
  <Catch2Adapter>
    <CommandLineArguments>--reporter junit</CommandLineArguments>
  </Catch2Adapter>
</RunSettings>

3. 检查远程SSH连接的权限与环境

  • 给测试程序赋予可执行权限:chmod +x /path/to/your-test-executable
  • 确认远程用户的PATH环境变量包含测试程序依赖库的路径,可在VS测试项目的调试配置中手动设置远程环境变量
  • 手动在远程终端运行/path/to/test-executable --reporter junit,查看输出是否正常,若输出为空或格式错误,会直接导致适配器流异常

4. 更新组件版本

  • 卸载当前的Test Adapter for Catch2,重新安装最新版本
  • 将Visual Studio升级到最新的17.8.x或更高版本,修复可能存在的远程测试适配bug

5. 禁用测试并行执行

在catch2.runsettings中添加配置禁用并行:

<RunSettings>
  <Catch2Adapter>
    <Parallelize>false</Parallelize>
  </Catch2Adapter>
</RunSettings>

远程环境下并行执行容易引发流读取异常

6. 调整测试项目编译模式

确保测试项目编译为Debug模式(适配器对Debug模式兼容性更好),且关闭编译优化选项(优化可能破坏测试输出结构)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:14:51