如何在 .Net 核心中 Moq DataLakeServiceClient

How to Moq DataLakeServiceClient in .Net core

我有一个 .NET Core 应用程序,其中有一个连接到 Azure Data Lake 的方法:

public DataLakeServiceClient GetDataLakeServiceClient(string StorageAccount)
{
    string clientId = _authenticationConfig.ClientId.Substring(6, _authenticationConfig.ClientId.Length - 6);
    TokenCredential credential = new ClientSecretCredential(
        _authenticationConfig.TenantId, clientId, _authenticationConfig.ClientSecret, new TokenCredentialOptions());

    string dfsUri = "https://" + StorageAccount + ".dfs.core.windows.net";

    DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(new Uri(dfsUri), credential);
    return dataLakeServiceClient;
}

我是这样使用的:

DataLakeServiceClient dataLakeServiceClient = _azureDataFactoryRepository.GetDataLakeServiceClient(_azureStorageClient.AzureStorageAccount02Value);

我尝试编写一个单元测试用例,尝试最小起订 GetDataLakeServiceClient:

_azureDataFactoryRepository.Setup(x => x.GetDataLakeServiceClient(It.IsAny<string>())).Returns();

在上面的代码中它应该 return DataLakeServiceClient 但我正在努力如何做到这一点。

我也没有看到任何方法IDataLakeServiceClient

有人可以帮我设置上面的方法吗?

DataLakeServiceClient 是一个 abstract class 所以你可以模拟这个并将这个模拟注入到更高级别的模拟中。所以你想要这样的东西:

var moqDataLakeServiceClient = new Mock<DataLakeServiceClient>();
_azureDataFactoryRepository
             .Setup(x => x.GetDataLakeServiceClient(It.IsAny<string>()))
            .Returns(moqDataLakeServiceClient.Object);

我不确定您使用的是什么模拟客户端,所以上面使用的是 Moq。