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

