Шаблоны для того, чтобы заставить C++ кодировать легкий протестировать

Это объяснено в документации Perl .

из-за приоритета оператора Perl оператор анализируется как

($condition ? $a= 2 : $a ) = 3 ;

поскольку?: оператор приводит к присваиваемому результату, 3 присвоен результату условия.

, Когда $condition верен, что это означает ($a=2) =3$a=3 предоставления

, Когда $condition является ложью, это означает ($a) =3$a=3 предоставления

корректный способ записать, что это

$a = ( $condition ? 2 : 3 );
print $a;

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

11
задан Joakim Karlsson 5 November 2009 в 14:39
поделиться

4 ответа

Следует ли мне реализовать классы, используя чистый интерфейсный класс в качестве основы, чтобы упростить создание поддельных тестовых объектов?

  • Это заставило бы меня сделать много виртуальных методов. Повлияет ли это на производительность?

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

Edit
Хорошо, простой пример:

С ООП и интерфейсами вы можете написать такую ​​функцию, как эта:

void Foo(IBar& someBar) { ... }

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

Но вы можете добиться того же с помощью шаблонов:

template <typename BarType>
void Foo(BarType& someBar) { ... }

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

9
ответ дан 3 December 2019 в 07:13
поделиться

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

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

5
ответ дан 3 December 2019 в 07:13
поделиться

Максимальное сцепление и минимальное сцепление .

Это облегчит вашу жизнь с помощью тестирования.

3
ответ дан 3 December 2019 в 07:13
поделиться

Я думаю, что первоочередной задачей должно быть ...

  1. Достижение функциональности
  2. Расширяемость кода
  3. Надежность кода
  4. Возможность обслуживания кода
0
ответ дан 3 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: