Я хочу написать модульный тест для этого контроллера.Моя цель - проверить, сохраняется ли файл в папку 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);
}