Visual Studio 2017 Professional测试相对路径错误问题求助
解决Visual Studio测试时读取项目文件路径错误的问题
这个坑我之前踩过!当你在Visual Studio里运行单元测试时,默认的工作目录并不是你的项目根目录,而是VS IDE的安装目录(就是你报错里的C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\),所以你用相对路径Path.Combine("testData", "input.html")时,程序会去IDE目录下找这个文件夹,自然就找不到了。
下面给你几个靠谱的解决方法:
方法1:修改测试项目的工作目录(最简单)
这是最直接的解决方案,让测试运行时的工作目录指向你的项目根目录:
- 右键你的测试项目,选择「属性」
- 切换到「调试」选项卡
- 在「工作目录」输入框中,填入
$(ProjectDir)(这是VS的内置宏,会自动替换成你的项目根目录路径) - 保存设置后重新运行测试,这时候你的代码就能正确找到项目里的
testData文件夹了
方法2:代码里动态构造项目根目录(更灵活)
如果不想修改项目设置,或者需要适配不同的运行环境,可以在代码里动态获取项目根目录,再构造文件路径:
using System.Reflection; using System.IO; // 获取当前测试程序集的输出目录 var assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 从输出目录往上回溯到项目根目录(层数根据你的项目结构调整,一般3层足够) var projectRoot = Path.GetFullPath(Path.Combine(assemblyDirectory, "..", "..", "..")); // 拼接出正确的文件路径 var inputFilePath = Path.Combine(projectRoot, "testData", "input.html"); var fileContent = File.ReadAllText(inputFilePath);
解释一下:测试程序集默认会编译到项目的bin\Debug或bin\Release目录下,所以用"..", "..", ".."往上跳3层就能回到项目根目录,如果你的目录结构不一样,可以调整回溯的层数。
方法3:将测试文件设置为复制到输出目录
另一种思路是把测试数据文件同步到程序集的输出目录,这样即使工作目录是IDE目录,也能通过相对路径找到(更适合工作目录为输出目录的测试框架):
- 在解决方案资源管理器中,选中
testData文件夹里的input.html文件 - 在右侧的属性窗口中,把「复制到输出目录」设置为「如果较新则复制」或者「始终复制」
- 编译测试项目后,文件会被复制到
bin\Debug\testData目录下,这时候你可以直接用相对路径读取
我个人更推荐方法1,简单粗暴一步到位;如果需要跨环境运行测试,方法2会更可靠。
内容的提问来源于stack exchange,提问作者Jesper Lundin
相关产品推荐
相关产品推荐

