gpt4 book ai didi

c# - 如何集成测试Azure Blob存储?

转载 作者:行者123 更新时间:2023-12-05 03:30:34 26 4
gpt4 key购买 nike

我正在开发一个企业业务项目,需要将应用程序从本地迁移到 Azure 云。

某些应用程序需要 Azure Blob 存储。所有 Azure 云基础设施都可以使用 Manage Identity 进行访问,业务要求是在无法访问 Azure 门户的情况下测试和验证 Azure Blob 方法,开发人员只能访问任何非生产或生产的存储资源。也就是说,该公司要求我们在将代码推送到云之前通过在本地和 GitHub 工作流程上进行测试来使所有存储功能正常工作。

当然,我可以启动我的个人 Azure 帐户并使用它,但仍然会使用我的帐户作为 Playground 进行测试,但并不是真正可用的测试。

通用测试 Azure Blob 存储的整个想法,无需对 Blob 存储有任何类型的访问权限。

这可能吗?我怎样才能实现这一目标?

以下是我针对 Azure Blob 的工作 POC 方法:

private readonly BlobContainerClient _blobContainerClient;

public AzureBlobStorage(string connectionString, string container)
{
_blobContainerClient = new BlobContainerClient(connectionString, container);
_blobContainerClient.CreateIfNotExists();
}

public async Task<string> ReadTextFile(string filename)
{
var blob = _blobContainerClient.GetBlobClient(filename);
if (!await _blobContainerClient.ExistsAsync()) return string.Empty;
var reading = await blob.DownloadStreamingAsync();
StreamReader reader = new StreamReader(reading.Value.Content);
return await reader.ReadToEndAsync();
}

public async Task CreateTextFile(string filename, byte[] data)
{
var blob = _blobContainerClient.GetBlobClient(filename);
await using var ms = new MemoryStream(data, false);
await blob.UploadAsync(ms, CancellationToken.None);
}

public async Task DeleteTextFile(string filename)
{
var blobClient = _blobContainerClient.GetBlobClient(filename);
await blobClient.DeleteAsync();
}

最佳答案

经过一番研究,我找到了解决方案并写了一篇相关文章。这是解决方案的简短版本。

要针对测试环境进行集成测试,我建议您遵循以下答案:

这是可能的,但需要几个步骤:

  1. 安装并部署Azurite(Azurite是Azure Blob Storage的本地版本,我使用的是docker版本)。
// here we pull azurite image
docker pull mcr.microsoft.com/azure-storage/azurite
// here we run azurite image and store data under c:\azurite folder
docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 -v c:/azurite:/data mcr.microsoft.com/azure-storage/azurite
  • 下载并安装 Azure Storage Explorer (可选)这样您就可以看到自己在做什么。
  • 确保 Azurite 已启动并在 Docker 桌面上运行。
  • 用任何语言编写您自己的 Azure Blob 代码。 (我使用了 C#,正如您在问题代码示例中看到的那样)。
  • 针对 Azurite 创建方法测试(下面的答案中的示例)。
  • 当所有工作都在本地进行时,我们开始使用 Docker.DotNet 在 C# 代码中自动启动 Azurite Docker,以便它可以自动拉取并启动 Azurite 以进行本地测试以及在 GitHub 操作中进行持续集成。
  • 就我而言,我使用我的 azure 存储方法创建了一个简单的类。您可以执行类似的操作(仅作为示例):

    [Fact]
    public async Task AzureBlobStorageTest()
    {
    // Arrange
    await _azureBlobStorage?.CreateTextFile("file.txt", Encoding.UTF8.GetBytes(Content))!;

    // Act
    var readTextFile = await _azureBlobStorage.ReadTextFile("file.txt");

    // Assert
    Assert.Equal(Content, readTextFile);

    // Finalizing
    await _azureBlobStorage.DeleteTextFile("file.txt");
    }

    您可以read更详细的步骤并找到源代码。

    享受😃

    Disclaimer: As I mentioned above, I wrote 3 articles about solving this problem. The link to this refers to my personal website.

    关于c# - 如何集成测试Azure Blob存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70794583/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com