c# - 我项目中数据的文件路径不起作用
问题描述
我正在构建一个通过发布请求接收 CSV 文件的 Web API。它以IFormFile
.
我想对我的 post 方法进行单元测试,我找到了模拟IFormFIle
我发送到 post 方法的唯一方法。我在我的单元测试项目中创建了一个文件夹,称为Data
存储 CSV 文件 ( Meter_Reading.csv
)。我已将文件的属性设置为Embedded Resource
.
这是我测试该方法的代码:
[Fact]
public void HasCorrectImageType()
{
var formFile = new Mock<IFormFile>();
var PhysicalFile = new FileInfo(@"C:\Users\eak\source\repos\MeterReadings\MeterReadings.Core.Tests\Data\Meter_Reading.csv");
var memory = new MemoryStream();
var writer = new StreamWriter(memory);
writer.Write(PhysicalFile.OpenRead());
writer.Flush();
memory.Position = 0;
var fileName = PhysicalFile.Name;
formFile.Setup(_ => _.FileName).Returns(fileName);
formFile.Setup(_ => _.Length).Returns(memory.Length);
formFile.Setup(_ => _.OpenReadStream()).Returns(memory);
formFile.Verify();
var controller = new ScanController();
var file = formFile.Object;
var result = controller.Scan(file);
Assert.IsAssignableFrom<OkObjectResult>(result);
}
我的问题是物理文件路径。我必须使用如上所示的完整路径才能使其正常工作。我已经尝试过这些将文件路径缩短为相对路径:
@"..\\Data\\Meter_Reading.csv"
或者
string fileName = "ich_will.mp3";
string path = Path.Combine(Environment.CurrentDirectory, @"Data\", fileName);
除了完整的文件路径外,没有任何作用。我不能使用该文件路径,因为其他开发人员应该在他们的机器上使用该应用程序,它不会工作。有任何想法吗?
解决方案
你可以使用IHostingEnvironment
private readonly IHostingEnvironment _environment;
public constructorName(IHostingEnvironment environment){
_environment = environment;
}
string fileName = "ich_will.mp3";
var path = _environment.ContentRootPath + "\\Data\\" + fileName;
推荐阅读
- javascript - 在圆内绘制平行等距线
- ios - 应用程序在发布模式下启动后立即崩溃。系统策略:拒绝(1)动态代码生成
- generics - 如何为 kotlin 存储 KFunction1 列表?
- mysql - 在 MariaDB10 中恢复 MySQL 5.7 表
- html - HTML CSS 水平滚动根本不起作用
- ruby-on-rails - RoR:类方法未生效
- reactjs - laravel react 命令运行开发不起作用
- javascript - 如何在表单提交时获取 v-select 字段的值?
- c++ - 为每个 MPI 进程等级创建一个组的并行 HDF5 C++ 程序
- r - 带有浮点数的字符列不会转换为数字