Skip to content

Latest commit

 

History

History

AspNet

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

nuget

Hypothesist.AspNet

Use Hypothesist to validate received requests (from an external invocation) via ASP.NET middleware.

Arrange

Define the hypothesis:

var observer = Observer.For<string>();

Insert the middleware to test from incoming requests:

var builder = WebApplication.CreateBuilder(args);

await using var app = builder.Build();
app.MapGet("/hello", (string data) => Results.Ok());
app.Use(observer
    .FromRequest()
    .With(request => request.Query["data"]!));

or read from the body:

app.Use(observer
    .FromRequest()
    .Body(body => JsonSerializer.DeserializeAsync<Guid>(body)));

Remark: the order of middleware is very important! If you plugin the hypothesis after the body is read by other middleware, you will receive an empty stream and thus no content.

Only test for a specific route:

app.UseWhen(context => context.Request.Path == "/hello", then => then
    .Use(observer
        .FromRequest()
        .With(request => request.Query["data"]!)));

or directly test from an endpoint filter:

app.MapPost("/hello", ([FromBody]Guid body) => Results.Ok(body))
    .AddEndpointFilter(observer
        .FromEndpoint()
        .With(context => context.GetArgument<Guid>(0)));

Act

Invocation on the endpoint from some external program, like:

curl 'http://localhost:1234/hello?data=some-input'

Assert

await Hypothesis
    .On(observer)
    .Timebox(2.Seconds());
    .Any()
    .Match("some-data")
    .Validate();