I was recently introduced to the WireMock.Net package. This is a .Net implementation of WireMock.
The basic idea where is that you can mock or stub a HTTP call. For example, you can tell it that when https://localhost:1234/test is called then a specific response should be returned - you could, for example, force it to error.
To get started, install the package:
install-package wiremock.net
This is a hefty package, so make sure it’s restricted to your test project.
The following code will replace the URL above with a response of “aaa”:
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
using WireMock.Server;
Console.WriteLine("Hello, World!");
var request = Request.Create()
.WithPath("/test")
.UsingGet();
var response = Response.Create()
.WithStatusCode(200)
.WithBody("aaa");
WireMockServer wireMockServer = WireMockServer.Start(1234);
wireMockServer
.Given(request)
.RespondWith(response);
HttpClient client = new HttpClient();
var result = await client.GetAsync("http://localhost:1234/test");
if (result != null && result.IsSuccessStatusCode)
{
var output = await result.Content.ReadAsStringAsync();
Console.WriteLine(output);
}
I did, at first, try to run this for an actual site (e.g. to intercept google.com or something), but it won’t allow that, only localhost (at least, as far as I could see). A friend at work pointed out that, in a test, you would pass the URL in through the config anyway, and so you could change it to localhost.
References
https://pcholko.com/posts/2021-04-05/wiremock-integration-test/