【问题标题】:Unit Testing Code for AzureAzure 的单元测试代码
【发布时间】:2010-07-20 15:30:00
【问题描述】:

我有一个 Azure 应用程序,最近在应用程序设置上大吃一惊。我意识到将我需要的几乎所有设置都放入 ServiceConfiguration 是一种显而易见的方式,你甚至可以随时远程更改任何东西;这意味着 Web 服务 URL、smtp 主机信息等都在我的 ServiceConfiguration 中。

想象一下,当我做出更改后,我尝试运行我的 200 多个单元测试,却直接遇到了这个错误:

Why am I getting SEHException when calling RoleEnvironment.GetConfigurationSettingValue("MYKEY")?

显然,我这里有几个选择...

-我可以使用 RoleEnvironment.IsAvailable() 编写我自己的小类来检查我应该从哪里获取我的设置,如果我不在 azure 中,可以从 app.config 中获取它们。

-我可以将我的应用程序部署到测试环境中,并且只测试面向外部的接口。

但是有“内置”方式吗?单元测试框架是否有任何更新,可以让我测试正在运行的确切代码(在它将运行的环境中以及将要部署的设置中)?

【问题讨论】:

标签: c# unit-testing azure


【解决方案1】:

截至 2012 年 6 月的 Azure 版本,您可以使用 CloudConfigurationManager - 如果可用,它会检查 .cscfg 和 .csdef 文件,否则从 app.config 或 Web.config 的 appSettings 部分读取:

<configuration>
  <appSettings>
    <add key="Foo" value="Bar" />
  </appSettings>
</configuration>

然后在代码中:

CloudConfigurationManager.GetSetting("Foo")

【讨论】:

  • 我认为这是最好的方法
【解决方案2】:

据我所知,测试框架中没有内置方法来测试您应该使用哪个版本的配置设置。我正在使用您描述的包装类(我相信您已经知道它很容易编写),但主要是为了让我们可以在开发结构之外运行我们的网站。

【讨论】:

  • 谢谢。这也是我得出的相同结论。感谢您的确认。
【解决方案3】:

您可以在测试项目的 [Assembly Initialise] 上运行模拟器。

ProcessStartInfo start = new ProcessStartInfo 
{                                             
    Arguments = "/devstore:start",                                             
    FileName = @"C:\Program Files\Windows Azure Emulator\emulator\csrun.exe"                        
};

更多这两个链接可能会有所帮助 http://andrewmatthewthompson.blogspot.nl/2011/12/deploying-packages-to-azure-compute.html

测试存储:http://www.neovolve.com/post/2012/01/12/Integration-testing-with-Azure-development-storage.aspx

【讨论】:

  • 这是一个有趣的想法!谢谢。这个问题来自不久前 - 所以,我已经为自己制定了一个可接受的解决方案 - 但这对于希望做同样事情并在搜索中遇到这个问题的其他人来说可能很有价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2013-04-16
  • 2012-09-02
  • 2016-10-26
相关资源
最近更新 更多