- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要模拟 Key Vault 的端点,以便知道我是否调用该函数来获取 Key Vault 一次。
我正在使用 C# 和 Moq(框架)开发此程序以便进行测试。
界面如下:
public interface IKeyVaultConnection
{
string GetKeyVaultValue(string variableName);
}
public class KeyVaultConnection
{
public KeyVaultClient keyVaultClient;
private string endpointKeyVault;
public KeyVaultConnection(string keyVaultAddress = "DefaultEndpoint")
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
endpointKeyVault = $"https://{ keyVaultAddress }.vault.azure.net";
}
private async Task<string> AsyncGetSecretValue(string keyName)
{
var secret = await keyVaultClient.GetSecretAsync($"{endpointKeyVault}/secrets/{ keyName }")
.ConfigureAwait(false);
return secret.Value;
}
public string GetKeyVaultValue(string variableName)
{
Task<string> task = Task.Run(async () => await AsyncGetSecretValue(variableName));
task.Wait();
return task.Result;
}
}
Mock<IKeyVaultConnection> mock = new Mock<IKeyVaultConnection>();
//----->>>>>> Need to setup the endpoint
mock.Setup(x => x.GetKeyVaultValue(It.IsAny<string>())).Returns(It.IsAny<string>());
// mock.Verify(x => x.GetKeyVaultValue(It.IsAny<string>()), Times.Once());
我需要的是伪造与端点的连接,以便我调用该函数一次并且收到如下错误:
"KeyVaultErrorException: Operation returned an invalid status code 'NotFound'"
未提供端点。
如果我取消最后一行的注释 (mock.Verify(x => x.GetKeyVaultValue(It.IsAny<string>()), Times.Once());)
我明白了:
"Expected invocation on the mock once, but was 0 times:
x => x.GetKeyVaultValue(It.IsAny<string>())"
最佳答案
如果您将您的类视为只是一个不起眼的包装器,以便其他类可以依赖 ISomethingThatReturnsValues
不知道KeyVaultClient
然后 mock KeyVaultClient
没有必要。我们只需要走到这一步。我们不需要对我们依赖的框架类进行单元测试。
换句话说,我们是否需要验证
keyVaultClient.GetSecretAsync($"{endpointKeyVault}/secrets/{ keyName }")
...实际上调用端点来获取 secret ?确实如此。这就是KeyVaultClient.GetSecretAsync(string)
做。如果测试失败,我们该怎么办?我们无法修复该类。同样,如果我们沿着这条路得出合乎逻辑的结论,我们就必须测试各种各样的东西。当我们创建 List<string>
并添加一个字符串,它真的被添加了吗?我们不测试这些东西,因为它们已经经过测试,因此可以合理地假设它们按预期工作。
对此的一个很好的测试是集成测试,它验证您的类是否达到了预期的效果。或者,如果另一个类依赖于此,您可以为该类编写集成测试,如果您无法从 key 保管库检索任何内容,该测试将会失败。但这不需要任何 mock 。
对类进行单元测试的部分原因是最小化它,这样它除了调用内部类之外什么都不做。在这种情况下,您可以折叠 public
和private
方法合一public
方法,也许还有一个提供 async
选项:
public async Task<string> GetSecretValueAsync(string keyName)
{
return await keyVaultClient.GetSecretAsync($"{endpointKeyVault}/secrets/{ keyName }");
}
public string GetSecretValue(string keyName) => GetSecretValueAsync(keyName).Result;
现在更明显了:这个类本身并没有真正做任何需要单元测试的事情。它的有用目的是适应KeyVaultClient
到您的界面 - IKeyVaultConnection
这样其他类就不会直接依赖 KeyVaultClient
.
关于c# - 如何使用 Moq Azure Key Vault 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55687830/
我目前正在学习保险库。我知道什么是 secret 引擎等以及它是如何工作的。但我没有找到任何关于 vault write 之间差异的信息。和 vault kv put .在我看来,这些命令做同样的事情
我已经在 k8s (AKS) 中安装了 vault 集群,现在我尝试使用 vault CLI 连接到该集群 问题是我找不到任何信息或文档。 我下载了 vault.exe,但是我在哪里配置它以连接到集群
我已经在 k8s (AKS) 中安装了 vault 集群,现在我尝试使用 vault CLI 连接到该集群 问题是我找不到任何信息或文档。 我下载了 vault.exe,但是我在哪里配置它以连接到集群
我在 docker 中运行Vault,如下所示: $ docker run -it --rm -p 8200:8200 vault:0.9.1 我已经打开了金库的密封: $ VAULT_ADDR=
我在 docker 中运行Vault,如下所示: $ docker run -it --rm -p 8200:8200 vault:0.9.1 我已经打开了金库的密封: $ VAULT_ADDR=
有没有办法在 SourceGear Vault Client 中查看已删除文件的内容和历史记录?我找到的唯一方法是取消删除文件,查看文件,然后再次删除文件。 我目前正在使用 Vault 4.1.2。
Vault 代理 v1.4.2 服务在 systemctl 下运行时无法呈现模板和创建文件。 但是相同的模板渲染按预期使用保险库代理服务中使用的命令工作 /opt/vault/bin/vault ag
是否可以列出存储在保险库后端的所有角色?我似乎找不到任何关于如何这样做的引用。 从文档中,似乎可以通过 auth/approle/role/my-role 列出给定角色名称的角色。 ,例如,但我没有看
我已经开始使用 Hashicorp 的 Vault 来管理 secret ,并且对 Vault 的日常密封有一些疑问。我的工作流程有两个身份验证后端;特定用户可以通过写入权限访问 Vault 以添加新
我无法理解 secret 列表的工作原理。我有具有路径权限的策略。 path "sys/mounts/*" { capabilities = ["create", "read", "update",
我们使用带有 Consul 的 Hashicorp Vault 作为存储,我们希望为 Vault 实现强大的备份和恢复策略。 我们特别希望在构建新的 Vault 服务器时备份所有 Vault 数据并使
我正在使用 Hashicorp Vault 和 java springVault,尝试生成几个键值对。执行此操作的最佳方法(或Vault API)是什么?理想情况下,此键值对是在 Vault 内生成的
我正在寻找更好的 secret 轮换解决方案,发现 Vault 动态 secret 是一个很好的解决方案。通过启用 secret 引擎,比如数据库,应用程序/服务可以租用动态 secret 。 我注意
这是official docs关于保管库提供商,事情是: provider "vault" { version = "2.10.0" address = "..." } 我确实设置了 VAUL
在 Docker 容器中运行时,vault -autocomplete-install失败。 $ docker run --privileged -ti vault:latest -autocompl
我只是在尝试新的 Vault UI .我希望能够使用用户名和密码登录。如何从命令行创建新用户以便我可以使用用户名和密码登录? 最佳答案 像这样创建一个新用户: vault write auth/use
我们已经为一台服务器安装并配置了 Hashicorp Vault AppRole 身份验证,通过存储 role_id和 secret_id在服务器上的本地文件中,我们可以让服务器上的代码从文件中读取值
我在本地安装了 Vault。我能够启动本地开发服务器并根据此官方教程 https://learn.hashicorp.com/vault/ 将一些 secret 写入/读取到 Vault kv 中 然
我正在使用 spring-cloud-vault 从 vault 服务器检索版本控制的 kv。当我使用 environemnt.getSecret("key1") 时,它仅返回最新版本的 key ,例
我不知道我是否做错了什么。 但这是我的配置。 // payload.json { "plugin_name": "postgresql-database-plugin", "allowed_r
我是一名优秀的程序员,十分优秀!