gpt4 book ai didi

multithreading - 如何使用 TableServiceContext.BeginSaveChanges 创建 Silverlight 单元测试?

转载 作者:行者123 更新时间:2023-12-03 13:13:38 26 4
gpt4 key购买 nike

我正在使用 Azure Toolkit 编写 Windows Phone 7 应用程序.我还使用 NUnit Test Runner for WP7 为其创建单元测试。 .

现在,我想测试一个代码,它使用 TableServiceContext.BeginSaveChanges 方法将数据保存到天蓝色表(没有可用的同步 SaveChanges 方法)。

我需要调用 BeginSaveChanges 并等到它在相同的测试方法中完成,如下所示:

[Test]
public void MyTest()
{
ICloudClientFactory factory = new CloudClientFactory();
ITableServiceContext context = factory.ResolveTableServiceContext("MyTable");
// add some entries here
UpdateContext(context);

AutoResetEvent autoResetEvent = new AutoResentEvent(false);
context.BeginSaveChanges((IAsyncResult result) =>
{
context.EndSaveChanges(result);
autoResetEvent.Set();
}, null);

bool set = autoResetEvent.WaitOne(TimeSpan.FromSeconds(5));

if (set)
{
Assert.Pass();
}
else
{
Assert.Fail();
}
}

autoResetEvent.WaitOne() 仅在 5 秒超时到期时返回,并且仅在此之后才返回 的异步回调context.BeginSaveChanges 叫做。
这是为什么?

我也试过调用 context.BeginSaveChanges 在来自 ThreadPool 的线程上(使用 ThreadPool.QueueUserWorkItem 方法) - 但这没有帮助。

这种行为与 Windows Phone 7/Silverlight 有什么关系吗?

谢谢!

最佳答案

ICloudClientFactory 和 ITableServiceContext 都是接口(interface)。不要直接使用实际的 Azure 云对象,而是使用模拟。这将删除外部依赖项 - 无论如何都不应该用于单元测试 - 并允许您单独测试您的代码。

所以:

var mockContext = new Mock<ITableServiceContext>()
ITableServiceContext context=mockContext.Object

这是 Moq 快速入门的链接: http://code.google.com/p/moq/wiki/QuickStart

关于multithreading - 如何使用 TableServiceContext.BeginSaveChanges 创建 Silverlight 单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890007/

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