44using System ;
55using System . Net ;
66using System . Net . Http ;
7+ using System . Reflection ;
78using System . Text ;
89using BasicWebSite . Models ;
910using Microsoft . AspNetCore . Hosting ;
11+ using Microsoft . AspNetCore . InternalTesting ;
1012using Microsoft . AspNetCore . Mvc . NewtonsoftJson ;
13+ using Microsoft . AspNetCore . Mvc . Testing ;
1114using Microsoft . VisualStudio . TestPlatform . ObjectModel . DataCollection ;
1215using Newtonsoft . Json ;
1316using Newtonsoft . Json . Linq ;
17+ using Xunit . Abstractions ;
1418
1519namespace Microsoft . AspNetCore . Mvc . FunctionalTests ;
1620
17- public abstract class ApiBehaviorTestBase < TStartup > : IClassFixture < MvcTestFixture < TStartup > > where TStartup : class
21+ public abstract class ApiBehaviorTestBase < TStartup > : LoggedTest where TStartup : class
1822{
19- protected ApiBehaviorTestBase ( MvcTestFixture < TStartup > fixture )
23+ protected override void Initialize ( TestContext context , MethodInfo methodInfo , object [ ] testMethodArguments , ITestOutputHelper testOutputHelper )
2024 {
21- var factory = fixture . Factories . FirstOrDefault ( ) ?? fixture . WithWebHostBuilder ( ConfigureWebHostBuilder ) ;
22- Client = factory . CreateDefaultClient ( ) ;
25+ base . Initialize ( context , methodInfo , testMethodArguments , testOutputHelper ) ;
26+ Factory = new MvcTestFixture < TStartup > ( LoggerFactory ) . WithWebHostBuilder ( ConfigureWebHostBuilder ) ;
27+ Client = Factory . CreateDefaultClient ( ) ;
28+ }
29+
30+ public override void Dispose ( )
31+ {
32+ Factory . Dispose ( ) ;
33+ base . Dispose ( ) ;
2334 }
2435
2536 private static void ConfigureWebHostBuilder ( IWebHostBuilder builder ) =>
2637 builder . UseStartup < TStartup > ( ) ;
2738
28- public HttpClient Client { get ; }
39+ public WebApplicationFactory < TStartup > Factory { get ; private set ; }
40+ public HttpClient Client { get ; private set ; }
2941
3042 [ Fact ]
3143 public virtual async Task ActionsReturnBadRequest_WhenModelStateIsInvalid ( )
@@ -374,11 +386,6 @@ public virtual async Task SerializingValidationProblemDetails_WithExtensionData(
374386
375387public class ApiBehaviorTest : ApiBehaviorTestBase < BasicWebSite . StartupWithSystemTextJson >
376388{
377- public ApiBehaviorTest ( MvcTestFixture < BasicWebSite . StartupWithSystemTextJson > fixture )
378- : base ( fixture )
379- {
380- }
381-
382389 [ Fact ]
383390 public override Task ActionsReturnBadRequest_WhenModelStateIsInvalid ( )
384391 {
@@ -412,21 +419,16 @@ public override Task SerializingValidationProblemDetails_WithExtensionData()
412419
413420public class ApiBehaviorTestNewtonsoftJson : ApiBehaviorTestBase < BasicWebSite . StartupWithoutEndpointRouting >
414421{
415- public ApiBehaviorTestNewtonsoftJson ( MvcTestFixture < BasicWebSite . StartupWithoutEndpointRouting > fixture )
416- : base ( fixture )
417- {
418- var factory = fixture . WithWebHostBuilder ( ConfigureWebHostBuilder ) ;
419- CustomInvalidModelStateClient = factory . CreateDefaultClient ( ) ;
420- }
421-
422422 private static void ConfigureWebHostBuilder ( IWebHostBuilder builder ) =>
423423 builder . UseStartup < BasicWebSite . StartupWithCustomInvalidModelStateFactory > ( ) ;
424424
425- public HttpClient CustomInvalidModelStateClient { get ; }
426-
427425 [ Fact ]
428426 public async Task ActionsReturnBadRequest_UsesProblemDescriptionProviderAndApiConventionsToConfigureErrorResponse ( )
429427 {
428+ await using var factory = new MvcTestFixture < BasicWebSite . StartupWithCustomInvalidModelStateFactory > ( LoggerFactory )
429+ . WithWebHostBuilder ( ConfigureWebHostBuilder ) ;
430+ var customInvalidModelStateClient = factory . CreateDefaultClient ( ) ;
431+
430432 // Arrange
431433 var contactModel = new Contact
432434 {
@@ -442,7 +444,7 @@ public async Task ActionsReturnBadRequest_UsesProblemDescriptionProviderAndApiCo
442444 } ;
443445
444446 // Act
445- var response = await CustomInvalidModelStateClient . PostAsJsonAsync ( "/contact/PostWithVnd" , contactModel ) ;
447+ var response = await customInvalidModelStateClient . PostAsJsonAsync ( "/contact/PostWithVnd" , contactModel ) ;
446448
447449 // Assert
448450 await response . AssertStatusCodeAsync ( HttpStatusCode . BadRequest ) ;
0 commit comments