C#: 단위 테스트 Azure 파일 SDK

9586 단어 csharpfilestestazure
Azure Files는 로컬 디스크와 같은 파일을 저장하는 훌륭한 서비스입니다. C# SDK를 사용하여 서비스에 액세스하지만 단위 테스트가 간단하지 않았습니다.

샘플 코드



Azure Files에서 모든 공유 이름을 반환하는 아래와 같은 C# 코드가 있다고 가정해 보겠습니다. 여기서는 ShareServiceClient에 DI를 사용합니다. 코드가 아주 간단하죠?

using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

namespace AzureFilesSample;

public class AzureFileSampleService
{
    private readonly ShareServiceClient shareServiceClient;

    public AzureFileSampleService(ShareServiceClient shareServiceClient)
    {
        this.shareServiceClient = shareServiceClient;
    }
    public async Task<List<string>> GetFileSharesAsync()
    {
        List<string> fileShares = new List<string>();
        await foreach (ShareItem item in shareServiceClient
            .GetSharesAsync()
            .WithCancellation(CancellationToken.None))
        {
            fileShares.Add(item.Name);
        }

        return fileShares;
    }
}


단위 테스트



위 코드에 대한 단위 테스트를 작성하려면 ShareServiceClient를 모의해야 합니다. 그러나 내부 생성자만 있기 때문에 ShareItem을 인스턴스화할 수 없습니다. github에서 소스 코드를 검색한 후 관련 모델을 인스턴스화할 수 있는 클래스ShareModelFactory를 찾았습니다.

이것은 단위 테스트 코드입니다. 나는 xUnit과 moq 라이브러리를 사용합니다.
  • ShareModelFactory를 사용하여 항목 인스턴스화
  • Azure 응답 관련 개체를 모의하려면 Azure Mocking 페이지를 참조하세요.

  • [Fact]
    public async Task Test1()
    {
        Mock<ShareServiceClient> mockedShareServiceClient = new Mock<ShareServiceClient>();
        ShareItem shareItem1 = ShareModelFactory.ShareItem("name1", ShareModelFactory.ShareProperties());
        ShareItem shareItem2 = ShareModelFactory.ShareItem("name2", ShareModelFactory.ShareProperties());
        ShareItem[] pageValues = new[] { shareItem1, shareItem2 };
        Page<ShareItem> page = Page<ShareItem>.FromValues(pageValues, default, new Mock<Response>().Object);
        Pageable<ShareItem> pageable = Pageable<ShareItem>.FromPages(new[] { page });
        AsyncPageable<ShareItem> asyncPageable = AsyncPageable<ShareItem>.FromPages(new[] { page });
        mockedShareServiceClient.Setup(x => x.GetSharesAsync(ShareTraits.None, ShareStates.None, null, CancellationToken.None))
            .Returns(asyncPageable);
    
        AzureFileSampleService service = new AzureFileSampleService(mockedShareServiceClient.Object);
    
        var results = await service.GetFileSharesAsync();
    
        Assert.Equal("name1", results.First());
        Assert.Equal("name2", results.Last());
    }
    


    요약



    분명히 Azure Mocking은 단위 테스트를 위한 훌륭한 리소스이지만 때때로 단위 테스트를 작성하는 방법을 파악하려면 소스 코드를 확인해야 합니다.

    참조



    Async Enumerables

    좋은 웹페이지 즐겨찾기