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

如何在Visual Studio测试资源管理器运行单元测试时更改工作目录

解决VS2022中NUnit测试工作目录默认到Temp的问题

问题根源

VS2022调整了测试运行的默认工作目录逻辑,不再像VS2019那样直接在项目的bin输出目录执行测试,而是改用系统临时目录(AppData\Local\Temp),这直接导致测试里的相对路径全部失效。

可行解决方案

1. 用.runsettings指定测试工作目录(适配NUnit 2)

在测试项目里创建一个Test.runsettings配置文件,强制测试在输出目录运行:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <!-- 把工作目录设为项目的输出目录 -->
    <WorkingDirectory>$(TargetDir)</WorkingDirectory>
  </RunConfiguration>
</RunSettings>

创建好后,在VS2022里操作:测试 → 配置运行设置 → 选择解决方案的运行设置文件,选中这个.runsettings文件即可生效。

2. 调整测试依赖文件的属性(更稳妥)

把NoPalmsTables.IB这类测试用的文件设置为自动复制到输出目录:

  • 在VS里选中该文件,右键打开属性面板
  • 复制到输出目录选「如果较新则复制」,生成操作设为「内容」
  • 之后代码里直接用相对路径./Fixtures/NoPalmsTables.IB就行,因为文件会被同步到bin目录对应的子文件夹里

3. 代码层面推导正确路径(不依赖环境)

不想改配置或文件属性的话,可以通过测试程序集的路径来推导项目根目录,彻底摆脱工作目录的限制:

// 获取当前测试程序集所在的目录
var assemblyDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
// 拼接出Fixtures文件夹下目标文件的绝对路径
var fixturePath = Path.GetFullPath(Path.Combine(assemblyDir, "../../Fixtures/NoPalmsTables.IB"));

4. 迁移到NUnit 3(长期推荐)

NUnit 3对VS2022的支持更完善,默认运行逻辑更稳定,后续也能通过NUnit的配置文件更灵活地控制测试行为,同时还能获得性能提升和新特性,适合你们正在考虑迁移的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:15:43