Получите ответ от HttpResponseMessage в модульном тесте - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть этот метод в моем контроллере, он запрашивает данные из базы данных, в этом случае он берет задание с предоставленным идентификатором и отправляет сообщение HttpResponse на веб-сайт, содержащий некоторые вложения (pdf, txt и т. Д.):

[HttpGet]
    [Route("jobs/{id}/attachment")]
    public HttpResponseMessage GetAttachment([FromUri]Guid id)
    {
        if (job.Blob == null)
        {
            // The job exists, but has no result data
            return this.CreateApiError(ApiError.ApiErrors.NO_CONTENT, "Job has no attachment", HttpStatusCode.NoContent);
        }

        var result = new HttpResponseMessage();
        result.Content = new StreamContent(new System.IO.MemoryStream(job.Blob));
        result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
        result.Content.Headers.ContentDisposition.FileName = job.Filename;
        result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

        return result;
    }

Возвращает status 200 и работает нормально.

Я пишу для него модульный тест, который выглядит следующим образом: я делаю данные о задании, добавляю их в базу данных с помощью JobQuery.Update(job);, а затемпопытайтесь получить его данные:

[Test]
    public void GetAttachmentTest()
    {
        var text = Encoding.ASCII.GetBytes("{\"name\":\"John\"}");
        System.IO.File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + @"\" + "Report -12.txt", text);
        var job = new Job
        {
            Id = Guid.Parse("deadbeef-dead-beef-0000-000000000000"),
            Filename = "Report -12.txt",
            AudienceOrganizationId = organization.Id,
            AudienceUserId = apiUser.Id,
            Blob = text
    };

        HttpResponseMessage getAttachment;
        try
        {
            getAttachment = this.Get<HttpResponseMessage>(this.url + this.prefix + "jobs/" + job.id + "/attachment");
        }
        catch (Exception ex)
        {
            Assert.Fail("Get jobs/{id}/attachment failed");
            return;
        }
    }

this.Get<HttpResponseMessage>(this.url + this.prefix + "jobs/" + job.id + "/attachment"); идет к контроллеру и ищет работу с этим идентификатором и возвращает вложение.В контроллере все работает нормально, если я посмотрю на ответ с веб-сайта, я получу его, но я не могу сделать это, чтобы получить его здесь в моем модульном тесте.И здесь getAttachment я получаю ноль.Как мне изменить мой тестовый модуль, чтобы получить ответ?Работа сохраняется в базе данных.У него есть файл вложения, который я получаю с помощью HttpResponse.

...