The code for this post can be found in https://github.com/dukeofharen/httplaceholder/blob/master/code-samples/dotnet.
In this small tutorial, we are going to take a look on how to verify a request made to a specific stub using the HttPlaceholder .NET client. In general, the following steps are executed:
The code can be found here and uses Testcontainers.NET to run a HttPlaceholder Docker container to run the tests against.
The following code makes sure to start a Docker container with HttPlaceholder and maps the application to port 1337
.
var container = new TestcontainersBuilder<TestcontainersContainer>()
.WithImage("dukeofharen/httplaceholder:2022.9.3.59")
.WithName("httplaceholder")
.WithPortBinding(1337, 5000)
.WithExposedPort(5000)
.WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(5000))
.Build();
await container.StartAsync();
After the container has started, we can create an HttPlaceholder client.
var client = HttPlaceholderClientFactory.CreateHttPlaceholderClient(
new HttPlaceholderClientConfiguration
{
RootUrl = "http://localhost:1337"
});
var stub = StubBuilder.Begin()
.WithId("some-stub-id")
.WithConditions(StubConditionBuilder.Begin()
.WithHttpMethod(HttpMethod.Get)
.WithPath("/someUrl")
.WithQueryStringParameter("queryParam",
StringCheckingDtoBuilder.Begin().StringEquals("someValue")))
.WithResponse(StubResponseBuilder.Begin()
.WithTextResponseBody("This is the response!"))
.Build();
await client.CreateStubAsync(stub);
The code above creates a simple stub which returns a plain text response.
Now that the stub has been added, we can actually make a request to it and verify the correct response was returned.
var httpClient = new HttpClient();
using var response = await httpClient.GetAsync("http://localhost:1337/someUrl?queryParam=someValue");
response.EnsureSuccessStatusCode();
var contents = await response.Content.ReadAsStringAsync();
Assert.AreEqual("This is the response!", contents);
By using the verification method in the HttPlaceholder client, you can verify whether a specific stub was called and with what parameters.
await client.VerifyStubCalledAsync("some-stub-id", TimesModel.ExactlyOnce(), DateTime.UtcNow.AddSeconds(-10));
The code above checks whether the stub with stub ID some-stub-id
(the stub we have defined above) has been called "exactly once". Furthermore, the request should not have been done more than 10 seconds ago. If this is all correct, the method will continue without throwing an exception. If the verification fails however, an exception will be thrown containing the verification details.
There are more overloads for the verification method, which you can read more about here.