2013-03-07 6 views
0

Мне нужно написать модульный тест в Windows Phone, чтобы проверить, десериализованы ли мои данные до нужного типа. Это то, что я сделал до сих пор.Как протестировать метод асинхронизации в Windows Phone

[TestMethod] 
    [Asynchronous] 
    public void SimpleTest() 
    { 
     await pots = help.potholes(); 

Я получаю сообщение о том, что «горшки» не ждут. Горшки - это список, который должен принять результат от функции выбоины, которая делает асинхронный вызов в моем веб-сервисе.

Это метод, выполняющий вызов с использованием Restsharp.

public void GetAllPotholes(Action<IRestResponse<List<Pothole>>> callback) 
    { 

     var request = new RestRequest(Configuration.GET_POTHOLE_ALL,Method.GET); 
     request.AddHeader("Accept", "application/json"); 
     _client.ExecuteAsync(request, callback); 

    } 

Как я могу сделать горшки ожидаемыми? Каков правильный способ тестирования служб отдыха в Windows Phone?

Я использую Framework Windows Phone Toolkit Test

Это учебник я следую. Asynchronous tests

ответ

1

Термин "асинхронный" перегружен в .net Сейчас.

Статья, на которую вы ссылаетесь, относится к методам awaitable, а не к асинхронным методам через обратные вызовы.

Вот приблизительное представление о том, как вы можете это проверить.

[TestMethod]   
[Asynchronous] 
public void SimpleTest() 
{ 
    // set up your system under test as appropriate - this is just a guess 
    var help = new HelpObject(); 

    help.GetAllPotholes(
     response => 
     { 
      // Do your asserts here. e.g. 
      Assert.IsTrue(response.Count == 1); 

      // Finally call this to tell the test framework that the test is now complete 
      EnqueueTestComplete(); 
     }); 
} 
0

Вы используете асинхр .. ждут в неправильном направлении

Попробуйте

public async void SimpleTest() 
{ 
    pots = await help.potholes(); 
    .... 
} 
1

, как матовое выражает термин Асинхронный в настоящее время используется в различных контекстах, в случае методов испытаний на Windows Phone, как вы можете видеть в вашем кусок кода не является ключевым, но приписано, что имеет цель освобождения рабочего потока для запуска других процессов и для вашего тестового метода ждать изменений, которые могут произойти в пользовательском интерфейсе или из запроса на обслуживание.

Вы можете сделать что-то подобное, чтобы ваш тест подождал.

[TestClass] 
public class ModuleTests : WorkItemTest 
{ 
    [TestMethod, Asynchronous] 
    public void SimpleTest() 
    { 
     var pots; 
     EnqueueDelay(TimeSpan.FromSeconds(.2)); // To pause the test execution for a moment. 
     EnqueueCallback(() => pots = help.potholes()); 
     // Enqueue other functionality and your Assert logic 
     EnqueueTestComplete(); 
    } 
}