Вы можете попробовать написать тест асинхронным.Рассмотрим этот метод тестирования:
[TestMethod]
[Asynchronous]
public void TestMethod1()
{
TestViewModel testViewModel = new TestViewModel();
bool firstNameChanged = false;
testViewModel.PropertyChanged +=
(s, e) =>
{
if (e.PropertyName == "FirstName")
{
firstNameChanged = true;
}
};
EnqueueCallback(() => testViewModel.FirstName = "first name");
EnqueueConditional(() => firstNameChanged == true);
EnqueueTestComplete();
}
Обратите внимание на асинхронный атрибут в верхней части метода.Здесь есть два важных метода: EnqueueCallback и EnqueueTestComplete.EnqueueCallback добавит лямбда-выражения в очередь, а тестовый метод будет ожидать выполнения текущего обратного вызова.В данном случае мы подписываемся на событие PropertyChanged в ViewModel и устанавливаем для локальной логической переменной значение true, когда свойство FirstName уведомляет об изменении.Затем мы ставим в очередь два обратных вызова: один для установки свойства FirstName и один для подтверждения того, что локальная логическая переменная изменила значение.Наконец, нам нужно добавить вызов EnqueueTestComplete (), чтобы инфраструктура знала, что тест закончен.
ПРИМЕЧАНИЕ. Чтобы получить EnqueueCallback и EnqueueTestComplete, вам необходимо наследовать от SilverlightTest в своем классе тестирования.Вам также необходимо импортировать Microsoft.Silverlight.Testing, чтобы получить асинхронный атрибут.Это должно выглядеть примерно так:
using Microsoft.Silverlight.Testing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Foo.Example.Test
{
[TestClass]
public class Tests : SilverlightTest
{
// ... tests go here
}
}