提问人:Resident Zero9999 提问时间:11/2/2023 最后编辑:Resident Zero9999 更新时间:11/3/2023 访问量:28
在返回时为 KeyVaultSecret 设置 lambdasAsync
Setting lambdas for KeyVaultSecret on ReturnsAsync
问:
我正在使用最小起订量 4.18.4,在设置 ReturnsAsync 时遇到问题,它向我显示以下错误
ISetup<SecretClient, Task<Response>>“不包含”ReturnsAsync“的定义,最佳扩展方法重载”SequenceExtensions.ReturnsAsync<Func>(ISetupSequentialResult<Task<Func>>, Func)“需要类型为”Moq.Language.ISetupSequentialResult<System.Threading.Tasks.Task<System.Func<Azure.Security.KeyVault.Secrets.KeyVaultSecret>>>类型的接收器。
我知道 lambda 函数应该有参数,但无论我如何尝试设置它们,我仍然得到错误结果
public async Task GetCertsFromKeyVaultAsync()
{
// Arrange
string certificateName = "MyCertificate";
string base64PrivateKey = "BASE64_PRIVATE_KEY_HERE";
byte[] privateKeyBytes = Convert.FromBase64String(base64PrivateKey);
X509Certificate2 expectedCertificate = new X509Certificate2(privateKeyBytes);
// Set up the SecretClient to return the expected secret
_mockSecretClient.Setup(client => client.GetSecretAsync(certificateName, null, CancellationToken.None))
.ReturnsAsync(() =>
{
return new KeyVaultSecret(certificateName, base64PrivateKey);
});
// Act
X509Certificate2 actualCertificate = await _keyVaultManager.GetCertificateFromKeyVaultAsync(certificateName);
// Assert
Assert.AreEqual(expectedCertificate, actualCertificate); ;
}
注意:下面是 GetSecretAsync 定义 https://learn.microsoft.com/en-us/dotnet/api/azure.security.keyvault.secrets.secretclient.getsecretasync?view=azure-dotnet
答:
该方法返回一个 ,因此为了使用 ,您必须提供 ,而不仅仅是 。GetSecretAsync
Task<Response<KeyVaultSecret>>
ReturnsAsync
Response<KeyVaultSecret>
KeyVaultSecret
事实证明,Response 类是一个类,因此一种选择是查找现有的派生类之一,并使用它来打包 .abstract
KeyVaultSecret
我不知道您到底想做什么,我也不知道那个 API,但另一种选择是也使用 Moq 来创建返回值:
mockSecretClient
.Setup(client => client.GetSecretAsync(certificateName, null, CancellationToken.None))
.ReturnsAsync(new Mock<Response<KeyVaultSecret>>().Object);
这编译了。
上一个:线程与异步循环
评论
GetSecretAsync