Как создать модульный тест Silverlight с помощью TableServiceContext.BeginSaveChanges? - PullRequest
2 голосов
/ 31 июля 2011

Я пишу приложение для Windows Phone 7, используя Azure Toolkit . Я также создаю для него модульные тесты, используя NUnit Test Runner для WP7 .

Теперь я хочу протестировать код, который сохраняет данные в таблицу Azure с использованием метода 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?

Спасибо!

1 Ответ

0 голосов
/ 17 августа 2011

И ICloudClientFactory, и ITableServiceContext являются интерфейсами.Вместо непосредственного перехода к фактическим облачным объектам Azure используйте насмешку.Это удалит внешние зависимости - которых в любом случае не должно быть для юнит-тестов - и позволит вам тестировать свой код изолированно.

Итак:

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

Вот ссылка наMoq Quickstart: http://code.google.com/p/moq/wiki/QuickStart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...