Тестирование IFormFile, который сохраняется в правильной папке в ASP.NET 2.2 - PullRequest
0 голосов
/ 12 мая 2019

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