Модульное тестирование параллельного программирования

У меня есть инструмент, который выполняет различные задачи одновременно.

Код выглядит так:

while (true)
{
    tasks.ForEachWithIndex((item, index) =>
    {
        if (tasksToExecute[index] == null || tasksToExecute[index].ShouldRerun())
        { tasksToExecute[index] = System.Threading.Tasks.Task.Factory.StartNewRecurring(() => ScheduledTaskHelper.ExecutePlatformTask(logWriter, uow, item)); }
    });

    // The tasks have been added to the factory, so let's start them now.
    var handleTaskCompletionTask = System.Threading.Tasks.Task.WhenAny(tasksToExecute.ToArray()).ContinueWith(
        (completedTask, o) =>
        {
            var taskId = completedTask.Result.Id;
            tasksToExecute.Find(x => x.Id == taskId).Rerun(true);
        }, null);

    try { handleTaskCompletionTask.Wait(); }
    catch (Exception ex)
    { }
}

Примечание: я не буду публиковать все детали реализации, потому что это приведет нас к многим.

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

Но сейчас я борюсь за то, как провести модульное тестирование этой реализации. Я думал о следующем подходе:

Создайте 2 задачи:

  • 1 задание, которое выполняется в течение 30 секунд.
  • 1 задание, которое длится 5 секунд.

Проверяет, что через 1 секунду обе задачи имеют статус IsRunning. Проверяет, что через 15 секунд все еще обе задачи имеют статус IsRunning.

Я надеюсь, что кто-то может помочь мне с этим.

0 ответов

Другие вопросы по тегам