.NET Core에서 권한 부여로 API 통합 테스트 설정

2765 단어 dotnetcsharp
최근에 .NET Core 프로젝트의 통합 테스트를 도입했습니다. Microsoft.AspNetCore.Mvc.Testing 및 Microsoft.AspNetCore.TestHost nuget 패키지의 훌륭한 지원이 있기 때문에 매우 간단합니다.
언급된 패키지와 함께 XUnit을 사용했습니다. 제 생각에는 XUnit이 제공하는 ClassFixtures 및 Collections로 인해 가장 잘 작동합니다.

통합 테스트를 위한 환경 설정
이전 섹션에서 언급했듯이 저는 XUnit 프레임워크를 사용하고 있습니다. TestFixtures를 만들 수 있습니다.

테스트 설비는 세트에 대해 다른 종류를 원할 때 유용합니다. 예를 들면 다음과 같습니다.

인증되지 않은 사용자를 사용한 테스트
인증된 사용자를 사용한 테스트
특정 리소스에 대한 권한이 없는 사용자를 사용하여 테스트
다중 테넌시 메커니즘을 확인하는 테스트
등등.

`
공개 클래스 TestFixture : IClassFixture>
{
보호된 읽기 전용 WebApplicationFactory Factory;
보호된 HttpClient 클라이언트;

public TestFixture(WebApplicationFactory<Startup> factory)
{
    Factory = factory;
    SetupClient();
}

protected static HttpContent ConvertToHttpContent<T>(T data)
{
    var jsonQuery = JsonConvert.SerializeObject(data);
    HttpContent httpContent = new StringContent(jsonQuery, Encoding.UTF8);
    httpContent.Headers.Remove("content-type");
    httpContent.Headers.Add("content-type", "application/json; charset=utf-8");

    return httpContent;
}

private void SetupClient()
{
    Client = Factory.WithWebHostBuilder(builder =>
    {
        /* I am telling builder to use appsettings.Integration,
        that is correctly set up in my DevOps pipeline */
        builder.UseEnvironment("Integration");
        var configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.Integration.json")
            .Build();

        builder.ConfigureTestServices(services =>
        {
            /* setup whatever services you need to override, 
            its useful for overriding db context if you're using Entity Framework */
            var dbConnectionString = configuration.GetSection("ConnectionStrings")["TheConnectionString"];

            services.AddDbContext<DbContext>(optionsBuilder =>
            {
                optionsBuilder.UseSqlServer(dbConnectionString);
            });

        })
        .CreateClient(new WebApplicationFactoryClientOptions
        {
            AllowAutoRedirect = false
        });
    }

`

고정 장치는 IClassFixture를 구현합니다. 이를 통해 다음을 수행할 수 있습니다.

DbContext의 연결 문자열 변경과 같은 서비스 구성 수정(통합 테스트에 유용할 수 있음)
비밀 관리에 사용하는 경우 Azure KeyVault와 같은 일부 다른 서비스 재정의
TestServer 설정(WebApplicationFactory와 함께 제공됨)
http 클라이언트 생성
데이터를 json으로 직렬화하고 필요한 헤더를 추가하는 메소드도 포함했습니다.
내 통합 테스트에서 REST API가 예상대로 작동하는지 확인하기 때문에 도움이 됩니다.

https://lukaszcoding.com/2020/04/integration-testing-in-net-core/에서 더 읽어보기

좋은 웹페이지 즐겨찾기