Недавно я попросил разработчика написать библиотеку, используя новые возможности многопоточности .NET 4.0.
Он проделал большую работу, но меня беспокоит, что логика Task повторяется по всему коду, а некрасиво инкапсулированы.
Я также обеспокоен тем, что это создает проблему, когда дело доходит до тестирования.Обычно я тестирую, создавая шов в коде, создавая интерфейс и объект-заглушку / макет для выполнения моих тестов.
Я полагаю, что это возможно, используя этот способ действий.Просто кажется, что логика производственного кода будет сильно отличаться от логики тестов.
Является ли решением сделать параллельные тесты и просто повторить в них логику Task?Или люди придумали шаблоны, в которых большая часть логики обработки задач может быть инкапсулирована для простого дублирования?
Спасибо!
Task task = Task.Factory.StartNew(() =>
{
if(cancellationToken.IsCancellationRequested)
{
throw new OperationCanceledException();
}
if (_bookHeader.EncryptionType != 0)
{
throw new MobiException("The book is encrypted");
}
ExtractText();
partReady(66.66f);
}, cancellationToken);
Task opfTask = task.ContinueWith(antecedent =>
{
if (antecedent.Status != TaskStatus.Canceled)
{
OpfDocument opf = CreateOpf();
partReady(80);
MobiDocument book = new MobiDocument()
{
Contents = _mobiHtml,
Description = opf,
Header = _bookHeader,
Sections = _sections
};
Document = book;
GC.Collect();
partReady(100);
}
});
return opfTask;
}