模拟 Azure 存储事务

Posted

技术标签:

【中文标题】模拟 Azure 存储事务【英文标题】:Mocking Azure Storage Transactions 【发布时间】:2013-01-03 20:56:21 【问题描述】:

我正在寻找使用 Moles Mocking 框架模拟 azure 存储事务。

关于如何使用 Moles 或任何其他模拟框架模拟 azure 存储事务的任何想法/文档/示例?

【问题讨论】:

P.S.我已经通过Guidance on Efficiently Testing Azure Solutions 我建议在包装器中抽象所有对 azure storage 的调用并模拟它们。您将从存储中获得的大多数问题都与连接相关或限制。 【参考方案1】:

虽然这不能直接回答问题,但作为替代解决方案,我使用开箱即用的模拟器,我相信它可以被视为 azure 存储的模拟。

这是我在单元测试基类中添加的用于启动存储模拟器的代码:

    [TestInitialize]
    public void setup()
    
         Process.Start(@"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\csrun", "/devstore").WaitForExit();

    

【讨论】:

感谢乌祖尔!但是,我期待模拟实体/事务并避免使用存储模拟器。【参考方案2】:

.NET 客户端的最新版本虚拟化了所有服务调用 API,并且还解封了相关类 - 这意味着模拟存储客户端库应该很简单。我相信测试是用最小起订量进行的。见:https://github.com/Azure/azure-storage-net/blob/master/BreakingChanges.txt

【讨论】:

【参考方案3】:

您需要做的就是为要模拟的任何 azure 类创建一个接口,并将该接口作为依赖项而不是具体的 azure 类,因为产品代码从存储 sdk 传递具体类,仅用于您的单元测试使用任何单元测试框架(即 Moq)或仅使用您的接口的模拟实现,您就完成了。

【讨论】:

【参考方案4】:

先决条件:下载 Microsoft Azure Sdk for .Net(包含存储模拟器) https://azure.microsoft.com/en-us/downloads/

您可以针对 Azure 存储模拟器运行您的代码。存储模拟器是在云中模拟 Azure 存储帐户的本地环境。模拟器是一个免费选项,用于在开发应用程序时测试和调试代码。模拟器使用众所周知的帐户和密钥。有关更多详细信息,请参阅使用 Azure 存储模拟器进行开发和测试

通过在web.config 中设置以下连接来连接到存储模拟器帐户

<appSettings>
  <add key="StorageConnectionString" value="UseDevelopmentStorage=true" />
</appSettings>

这是我的开发存储模拟器的屏幕截图,这是 Blob 表等的模拟...

【讨论】:

以上是关于模拟 Azure 存储事务的主要内容,如果未能解决你的问题,请参考以下文章

在 Java SDK 中模拟 Azure 存储 Blob

如何模拟 Azure 队列存储以进行单元测试?

添加 VS 2015 SDK 后 Azure 存储模拟器失败

Azure:使用存储模拟器时的帐户名称和访问密钥是啥?

Windows Azure 存储模拟器安装失败

Azure 存储模拟器无法初始化,并显示“数据库 'AzureStorageEmulatorDb57' 不存在”