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

如何在NUnit C#中拼接文件名与文件夹路径并验证结果

解决你的NUnit测试路径拼接与断言问题

我来帮你一步步搞定这两个问题:

1. 正确拼接路径与文件名

你当前的代码里,processFilePath只是单独定义了文件所在目录,但没和TestCase传入的文件名结合,导致执行cat命令时只会在当前目录找文件,自然找不到目标文件。推荐两种解决方式:

方法一:用Path.Combine(更可靠)

Path.Combine是C#专门用来处理路径拼接的方法,它会自动适配系统的路径分隔符,不管目录路径结尾有没有斜杠,都能生成正确的完整路径。记得先引用System.IO命名空间。

修改后的代码片段:

using System.IO; // 别忘了添加这个引用

[NUnit.Framework.TestCase("irm_xxx_tbbmf_xu.csv.ovr", "6677,6677_6677,3001,6")]
[NUnit.Framework.TestCase("irm_xxx_tbbmf_xxx.csv.ovr", "6677,22,344")]
public void ValidateInventoryMeasurement(string fileName, string expected)
{
    var processFilePath = "/orabin/product//inputs//actuals/";
    // 拼接目录和文件名
    var fullFilePath = Path.Combine(processFilePath, fileName);
    // 使用完整路径执行cat命令
    var actual = Common.LinuxCommandExecutor.RunLinuxcommand("cat " + fullFilePath);
    
    // 后续断言逻辑...
}

方法二:字符串插值拼接

如果你不想用Path.Combine,也可以直接用字符串插值,但要确保目录路径结尾有斜杠(你当前的processFilePath已经满足):

var fullFilePath = $"{processFilePath}{fileName}";

不过这种方式不如Path.Combine稳妥,要是后续修改目录路径时不小心删掉了结尾斜杠,就会出现路径拼接错误。

2. 关于Assert.AreEqual的有效性

当前的断言写法不一定能正常生效,主要有两个坑:

  • cat命令执行后返回的结果大概率包含文件末尾的换行符,而你的expected是纯逗号分隔字符串,两者会因为这个换行符不匹配导致断言失败。
  • 如果RunLinuxcommand方法返回的内容包含命令执行的额外输出(比如错误信息、多余空格),也会干扰匹配结果。

解决办法很简单:在断言前对actual做空白字符处理,用Trim()去掉首尾的换行、空格、制表符等:

var actual = Common.LinuxCommandExecutor.RunLinuxcommand("cat " + fullFilePath).Trim();
Assert.AreEqual(expected, actual);

要是你的文件内容本身包含首尾空格,那就不要用Trim(),而是要确保expected和文件内容完全一致(包括空格、换行)。另外还要确认RunLinuxcommand方法只返回命令的标准输出,不包含错误输出,否则错误信息会打乱断言结果。

完整修改后的测试方法:

using System.IO;

[NUnit.Framework.TestCase("irm_xxx_tbbmf_xu.csv.ovr", "6677,6677_6677,3001,6")]
[NUnit.Framework.TestCase("irm_xxx_tbbmf_xxx.csv.ovr", "6677,22,344")]
public void ValidateInventoryMeasurement(string fileName, string expected)
{
    var processFilePath = "/orabin/product//inputs//actuals/";
    var fullFilePath = Path.Combine(processFilePath, fileName);
    var actual = Common.LinuxCommandExecutor.RunLinuxcommand("cat " + fullFilePath).Trim();
    
    Assert.AreEqual(expected, actual);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:16:18