public async Task Returns_expected_response() { // Arrange var expectedString = "this is a string value"; var expectedNumber = 32; var client = new SelfContainedWebApplicationFactoryWithWebHost <Post_with_2_handlers> ( configureServices: services => { services.AddViewModelComposition(options => { options.AssemblyScanner.Disable(); options.RegisterCompositionHandler <TestStringHandler>(); options.RegisterCompositionHandler <TestIntegerHandler>(); options.EnableWriteSupport(); }); services.AddRouting(); }, configure: app => { app.UseRouting(); app.UseEndpoints(builder => builder.MapCompositionHandlers()); } ).CreateClient(); client.DefaultRequestHeaders.Add("Accept-Casing", "casing/pascal"); dynamic model = new ExpandoObject(); model.AString = expectedString; model.ANumber = expectedNumber; var json = (string)JsonConvert.SerializeObject(model); var stringContent = new StringContent(json, Encoding.UTF8, MediaTypeNames.Application.Json); stringContent.Headers.ContentLength = json.Length; // Act var response = await client.PutAsync("/sample/1", stringContent); // Assert Assert.True(response.IsSuccessStatusCode); var responseString = await response.Content.ReadAsStringAsync(); var responseObj = JObject.Parse(responseString); Assert.Equal(expectedString, responseObj?.SelectToken("AString")?.Value <string>()); Assert.Equal(expectedNumber, responseObj?.SelectToken("ANumber")?.Value <int>()); }