c# - 测试保存在 ASP.NET 2.2 中正确文件夹中的 IFormFile
问题描述
我想为此控制器编写单元测试。我的目标是检查文件是否保存到wwwroot/images
文件夹中,我想通过将文件夹中的文件与Guid
生成的imageNameToSave
.
问题是 - 产生了两个不同Guid
的。
public async Task<IActionResult> Create(CreateNewsViewModel model)
{
var imageNameToSave = Guid.NewGuid() + ".jpg";
var role = await this.newsService.CreateNewsAsync(model.CreatedOn, model.Title, model.Text, imageNameToSave);
using (var ms = new MemoryStream())
{
model.Image.CopyTo(ms);
var uploads =
Path.Combine(this.hostingEnvironment.WebRootPath, "images");
var filePath = Path.Combine(uploads, imageNameToSave);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await model.Image.CopyToAsync(fileStream);
}
}
return this.RedirectToAction("Index", "Home");
}
这是我到目前为止所做的。我的问题是我怎样才能得到相同的结果Guid
并在测试后删除创建的文件?
[TestMethod]
public async Task Call_NewsServiceWithCorrectParams_OnPost()
{
// Arrange
DateTime createdOn = DateTime.Now;
string title = "Tony Stark dies in Avengers!";
string text = "Tony had to sacrifice himself for the greater good in the battle with Tanos";
string imageNameToSave = Guid.NewGuid() + ".jpg";
var ms = new MemoryStream();
var formFile = new FormFile(ms, 0, ms.Length, "name", imageNameToSave);
var newsServiceMock = new Mock<INewsService>();
var hostingEnvironmentMock = new Mock<IHostingEnvironment>();
var currentDirectory = Directory.GetCurrentDirectory();
var endIndex = currentDirectory.IndexOf(@"\MovieManagement\");
var wwwrootFolderPath = "\\MovieManagement\\MovieManagement\\wwwroot";
var path = Path.Combine(currentDirectory.Substring(0, endIndex) + wwwrootFolderPath);
hostingEnvironmentMock.SetupGet(x => x.WebRootPath).Returns(path);
var model = new NewsViewModel()
{
CreatedOn = createdOn,
Title = title,
Text = text,
Image = imageNameToSave
};
newsServiceMock.Setup(ns => ns.CreateNewsAsync(createdOn, title, text, imageNameToSave)).ReturnsAsync(model);
var createModel = new CreateNewsViewModel()
{
CreatedOn = createdOn,
Title = title,
Text = text,
Image = formFile
};
var sut = new NewsManagementController(newsServiceMock.Object, hostingEnvironmentMock.Object);
// Act
var result = await sut.Create(createModel);
// Assert
newsServiceMock.Verify(x => x.CreateNewsAsync(createdOn, title,
text, imageNameToSave), Times.Once);
}
解决方案
推荐阅读
- java - Panache 与 MongoDB 发现不同
- postgresql - 从时间尺度数据库中的连续聚合获取数据时出现“预期的 2 元素 int8 数组”错误(使用带有子查询的查询)
- python - 在 FastAPI / Uvicorn 中接受压缩后的正文
- latex - 来自远程源的乳胶类?
- javascript - 从数组创建集合的时间复杂度是多少?
- java - 在 Mac 上的 AWT 组件中忽略输入法输入
- c++ - Makfile 使用相同的 cpp 文件生成对象
- python - Pandas 返回错误:“系列”对象是可变的,因此它们不能被散列
- python - Python Webscraping通过坐标点击
- swift - ``在swift中是什么意思,为什么有用?