Skip to content

Instantly share code, notes, and snippets.

@Wind010
Created April 19, 2020 06:01
Show Gist options
  • Save Wind010/0988df1de23c288deb387ab4ba9bc05a to your computer and use it in GitHub Desktop.
Save Wind010/0988df1de23c288deb387ab4ba9bc05a to your computer and use it in GitHub Desktop.
A mock response for testing HttpContext.Response.

Usage


[TestMethod]
public async Task Invoke_AddResopnseHeaders_ResponseHeaderExists() {
    // ARRANGE
    const string expectedHeaderValue = "SomeValue";
    
    var respFeature = new MockResponseFeature();
    var ctx = new DefaultHttpContext();
    ctx.Features.Set<IHttpResponseFeature>(feature);

    RequestDelegate next = async (ctx) => {
        await respFeature.InvokeCallBack();
    };

    var alterResponseMiddleware = new AlterResponseMiddleware(next);

    // ACT
    await alterResponseMiddleware.Invoke(context);

    // ASSERT
    var response = ctx.Response;
    Assert.True(response.Headers.TryGetValues("X-Your-Header", out var expectedHeader));
    Assert.Equals(expectedHeaderValue, expectedHeader.FirstOrDefault()
}
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Threading.Tasks;
namespace Starbucks.CustomerEngagement.Serilog.Enrichers.Tests
{
[ExcludeFromCodeCoverage]
sealed public class MockResponseFeature : IHttpResponseFeature
{
public Stream Body { get; set; }
public bool HasStarted { get { return hasStarted; } }
public IHeaderDictionary Headers { get; set; }
public string ReasonPhrase { get; set; }
public int StatusCode { get; set; }
public void OnCompleted(Func<object, Task> callback, object state)
{
}
public void OnStarting(Func<object, Task> callback, object state)
{
this.callback = callback;
this.state = state;
}
bool hasStarted = false;
Func<object, Task> callback;
object state;
public Task InvokeCallBack()
{
hasStarted = true;
return callback(state);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment