2012-05-20 2 views
0

Первое, что вы узнаете по TDD, - это то, что для проверки того, что нужно проверить, они должны быть слабо связаны. И в большинстве языков это достигается путем разделения связи через интерфейсы, откладывания инъекций зависимостей, таких, что макет объектов может быть состыкован с теми реализациями, которые мы хотим проверитьтехники для TDD с шаблонами C++

Теперь, на C++, мы, конечно, можем следовать этот подход к письму с использованием абстрактных классов в качестве интерфейсов, но у нас также есть возможность программирования шаблонов, которая разрешает зависимости во время компиляции

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

Одним словом, какой лучший подход к следующему TDD при программировании с шаблонами и полиморфизмом во время компиляции?

ответ

1

В большинстве случаев я не видел, чтобы он действительно отличался от инъекции зависимости через наследование. Просто напишите класс stub/mock, который реализует концепцию, необходимую вашему шаблону, создайте шаблон с этим классом и оттуда ... точно так же, как если бы это был абстрактный интерфейс, который я бы наследовал от него, вставьте его в объект I хотите проверить (вероятно, во время строительства), а затем запустить мои тесты ...

Очень простой пример:

template < typename T > 
T* create(); 

struct object {}; 

TEST_CASE(itCreates) { 
    object * o = create<object>(); 
    o != 0; 
    delete o; 
} 
Смежные вопросы