首页 > 解决方案 > 我项目中数据的文件路径不起作用

问题描述

我正在构建一个通过发布请求接收 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);

除了完整的文件路径外,没有任何作用。我不能使用该文件路径,因为其他开发人员应该在他们的机器上使用该应用程序,它不会工作。有任何想法吗?

标签: c#filenunitmoq

解决方案


你可以使用IHostingEnvironment

private readonly IHostingEnvironment _environment;
public constructorName(IHostingEnvironment environment){
 _environment = environment;
}
string fileName = "ich_will.mp3";
var path = _environment.ContentRootPath + "\\Data\\" + fileName;

推荐阅读