Как уже упоминалось, вы должны быть осторожны, когда наступаете на тонкую линию того, что нужно проверить, а что - не -to-test. Это может привести к хрупким испытаниям, которые слишком связаны с реализацией.
Это, как говорится, я абсолютно вижу полезность в том, что вы пытаетесь сделать. Тестирование обработки исключений само по себе стоит задать этот вопрос.
Проблема связана с использованием статического объекта (Task.Factory
). Статические объекты/методы известны тем, что препятствуют тестированию. Решение этой проблемы такое же, как и для развязки любого типа статического объекта - введение seam.
Вы используете статический объект для запуска и возвращаете ссылку, Task
. Это то, что вы можете определить для role interface. Это может выглядеть примерно так:
public interface ITaskFactory
{
Task StartNew(Action action);
}
С реализацией производства, которая выглядит как:
public class TplTaskFactory : ITaskFactory
{
public Task StartNew(Action action)
{
return Task.Factory.StartNew(action);
}
}
Затем можно использовать инъекции зависимостей для питания вашего SUT с макетом реализации этого интерфейса, который дает Вам которую вы ищете.
Модульные испытания не предназначены для проверки внутреннего поведения компонентов, но для обеспечения выхода для определенного входа. Если есть что-то, что вы не можете проверить, вероятно, вам следует пересмотреть архитектуру вашего компонента, модификаторы доступа или просто проверить поведение. –