Классы тестирования, которые используют соавторы с шаблонными методами - PullRequest
0 голосов
/ 07 декабря 2010

Мне нравятся вещи, которые методы шаблонов могут сделать для меня, поскольку они могут использоваться для существенного упрощения некоторого кода, который в противном случае пришлось бы писать снова и снова.

Однако мне очень тяжело тестировать любые классы, которые зависят от соавторов, у которых есть общедоступные шаблоны. Настоящая проблема заключается в том, что они не могут быть виртуальными, поэтому мой обычный метод создания подклассов зависимостей и создания заглушек не работает.

В настоящее время мое решение состоит в том, чтобы создать не шаблонный интерфейс, который включает все поддерживаемые типы, а затем использовать шаблоны в качестве детали реализации. Это тестируемое, но утомительное обновление для большого числа типов, проходящих через многие классы. Я полагаю, что я мог бы также изменить дизайн для использования полиморфизма на основе наследования, но если бы мои проблемы с тестированием могли быть решены без изменения системы, я бы предпочел это.

Я подумал, что мог бы что-то сделать, используя специализацию шаблонов, чтобы изменить поведение моей тестовой библиотеки и моей производственной библиотеки, но я не уверен, что это эффективно ... или даже возможно.

Итак, как лучше всего тестировать классы, которые используют шаблонные методы в своих зависимостях?

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

Google Mock Framework предоставляет способ создания макета с параметрами шаблона.Затем вы должны добавить шаблонный базовый класс и передать фиктивный объект в конструктор тестируемого класса.

0 голосов
/ 18 декабря 2010

Я хотел исследовать это дальше, поэтому я потратил некоторое время, чтобы попробовать решение для специализации шаблонов, о котором я думал.Это можно сделать, но все же настоящая боль.Большое ограничение на специализацию шаблона заключается в том, что это должно быть сделано до того, как будет сделана какая-либо ссылка на шаблон.По сути, это означает, что вы должны выполнять макет для любых типов, используемых в тестах, в том же заголовочном файле, что и рабочий код.Это достаточно плохо для простых типов, но может быть сложным или невозможным для классов в других библиотеках, из-за необходимости определить тип, где он специализирован.

Поэтому я не думаю, что специализация шаблонов выполнимаспособ макетировать функцию для модульных тестов.Создание тестируемого класса в качестве шаблона и использование макета Google для создания фиктивной версии, по-видимому, является единственным разумным решением, кроме определения не шаблонного интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...