Set de interfaz de usuario y la tarea de fondo schedulars y reemplazarlos en la prueba de la unidad con éste.
A continuación código fue copiado de Internet, lo siento por falta de referencia al autor:
public class CurrentThreadTaskScheduler : TaskScheduler
{
protected override void QueueTask(Task task)
{
TryExecuteTask(task);
}
protected override bool TryExecuteTaskInline(
Task task,
bool taskWasPreviouslyQueued)
{
return TryExecuteTask(task);
}
protected override IEnumerable<Task> GetScheduledTasks()
{
return Enumerable.Empty<Task>();
}
public override int MaximumConcurrencyLevel => 1;
}
Así que para probar el código:
public TaskScheduler TaskScheduler
{
get { return taskScheduler ?? (taskScheduler = TaskScheduler.Current); }
set { taskScheduler = value; }
}
public TaskScheduler TaskSchedulerUI
{
get { return taskSchedulerUI ?? (taskSchedulerUI = TaskScheduler.FromCurrentSynchronizationContext()); }
set { taskSchedulerUI = value; }
}
public Task Update()
{
IsBusy = true;
return Task.Factory.StartNew(() =>
{
LongRunningTask();
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler)
.ContinueWith(t => IsBusy = false, TaskSchedulerUI);
}
Usted escribirá siguiente unidad de prueba:
[Test]
public void WhenUpdateThenAttributeManagerUpdateShouldBeCalled()
{
taskScheduler = new CurrentThreadTaskScheduler();
viewModel.TaskScheduler = taskScheduler;
viewModel.TaskSchedulerUI = taskScheduler;
viewModel.Update();
dataManagerMock.Verify(s => s.UpdateData(It.IsAny<DataItem>>()));
}
https://codeblog.jonskeet.uk/2011/11/25/eduasync-part-17-unit-testing/ – luviktor
@luviktor: corregido, gracias. (La próxima vez, siempre puede sugerir la edición usted mismo). –