lundi 10 février 2020

How to Mock file uploading using NUnit

I am busy writing Unit tests for a program and got stuck on how to test a file being uploaded. I am using .Net Framework 4.7.2 and NUnit 3.12.

This is the service method I am writing a test for but I dont know how to mock the HttpRequestMessage as to resemble an actual file being uploaded. Any assistance is greatly appreciated.

public async Task<MultipartFileDataModel> WriteAsync(HttpRequestMessage request, string directory)
{
    var dataStreamProvider = new MultipartFormDataStreamProvider(directory);

    try
    {
        await request.Content.ReadAsMultipartAsync(dataStreamProvider)
            .ConfigureAwait(false);
    }
    catch
    {
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
    }

    return new MultipartFileDataModel
    {
        LocalFileName = dataStreamProvider.FileData[0].LocalFileName,
        HeaderFileName = dataStreamProvider.FileData[0].Headers.ContentDisposition.FileName
    };
}

Here is my test so far

[Test]
public async Task UploadContactFile_ReturnsContactFileIdAndListOfColumns()
{
    // Arrange
    var fixture = CreateFixture();
    var contactFilesDirectory = "D:\\Tenants\\Dev\\contactfiles";
    var request = fixture.Create<HttpRequestMessage>();
    request.Content = new MultipartContent();

    var files = fixture.Create<MultipartFileDataModel>();
    fixture.Freeze<Mock<IMultipartFileWriter>>()
        .Setup(repo => repo.WriteAsync(request, contactFilesDirectory))
        .Returns(Task.FromResult(files));

    var service = fixture.Create<MultipartFileWriter>();

    // Act
    var result = await service.WriteAsync(request, contactFilesDirectory)
        .ConfigureAwait(false);

    // Assert

}

Aucun commentaire:

Enregistrer un commentaire