gpt4 book ai didi

c# - CloudConfigurationManager.GetSetting 在单元测试中返回 Null

转载 作者:行者123 更新时间:2023-11-30 17:48:28 26 4
gpt4 key购买 nike

因此,我编写了一个 Azure 辅助角色和一些单元测试来验证它是否按预期工作。问题是 CloudConfigurationManager.GetSetting 始终返回 null。

在运行任何单元测试之前调用以下 WorkerRole 方法:

 public override bool OnStart()
{
string connectionString = CloudConfigurationManager.GetSetting("StorageConnectionString");

var account = CloudStorageAccount.Parse(connectionString);
...
}

我使用 Visual Studio 的设置 gui 来实际设置连接字符串属性(本地和云部署的属性不同),因此我知道 cscfg 文件应该有效。本地 ServerAgent 设置如下所示:

<Role name="ServerAgent">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="StorageConnectionString" value="SUPER SEKRET" />
</ConfigurationSettings>

所以我想问题是,CloudConfigurationManager 如何找到正确的 cscfg 文件?单元测试项目引用 ServerAgent 项目,但 ServerAgent 项目不引用 CloudService 项目。

Solution layout

最佳答案

当测试运行程序执行测试时,它通常在以下任一位置运行测试

  • 一个新的应用程序域
  • 新流程

这在一定程度上取决于测试运行程序,但使用新的 AppDomain 似乎是当今最常见的方法。

每个新进程或 AppDomain 都有自己的配置设置,这些设置不会成为您的 .cscfg 文件。通常,按照惯例,大多数测试运行程序都会从​​单元测试项目的 app.config 文件中获取配置设置,因此尝试将配置设置放入 ServerAgent.Tests.app.config

也就是说,我建议您重构您的被测系统,使其不依赖于配置设置,因为配置设置在测试期间很难改变。

假设您想要测试系统在不同配置值下的行为。如果您使用配置文件,则无法轻松做到这一点。

虽然我意识到 Azure 辅助角色要求有一个具有特定签名的 OnStart 方法,但请将其实现为 Humble Method :

public override bool OnStart()
{
string connectionString =
CloudConfigurationManager.GetSetting("StorageConnectionString");

return OnStartImpl(connectionString);
}

public bool OnStartImpl(string connectionString)
{
// Put all implementation code here
}

然后测试 OnStartImpl

顺便说一句,如果您正在运行连接到真实云服务的自动化测试,它们不是单元测试,而是 something else 。虽然我不知道您编写测试的动机,但请考虑编写大部分测试,以便它们不依赖于无关的服务。

关于c# - CloudConfigurationManager.GetSetting 在单元测试中返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038148/

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