.NET Core 6中CsvReader模拟值未返回的问题咨询(无法修改实例代码)
问题原因
- 你模拟的
CsvReader对象和函数内部通过new CsvReader(reader, config)创建的实例完全无关,模拟的配置自然不会生效。 CsvReader的GetRecords<T>方法如果是非虚方法(或是扩展方法),Moq无法直接拦截并替换其返回值。
可行解决方案
既然无法修改创建CsvReader的代码,那就换一种思路:模拟StreamReader的输入内容,让真实的CsvReader读取预设的CSV数据,从而得到你想要的记录。
具体实现代码如下:
// 构造与MyClass字段匹配的CSV内容 var csvContent = "ID,Name\n123,ABC"; // 将字符串转为内存流 var stream = new MemoryStream(Encoding.UTF8.GetBytes(csvContent)); // 创建读取该流的StreamReader var testReader = new StreamReader(stream); // 调用目标函数,传入testReader和你的config var result = YourTargetFunction(testReader, config); // 验证结果符合预期 Assert.Single(result); Assert.Equal("123", result[0].ID); Assert.Equal("ABC", result[0].Name);
补充说明
这种方式完全不需要修改目标函数的代码,通过伪造输入源的方式,让真实的CsvReader解析出你预设的记录,既符合测试逻辑,也规避了无法修改目标代码的限制。
内容的提问来源于stack exchange,提问作者user20358
相关产品推荐
相关产品推荐

