Какова стоимость “как” по сравнению с QueryInterface в COM или dynamic_cast в C++?

Я склонен следовать совету Dave Thomas и Andy Hunt в их книге Прагматическое Поблочное тестирование :

В целом, Вы не хотите повреждать любую инкапсуляцию ради тестирования (или поскольку мама раньше говорила, "не представляют Ваше причинное место!"). Большую часть времени необходимо быть в состоянии протестировать класс путем осуществления его открытых методов. Если существует значительная функциональность, которая скрыта позади частного или защищенного доступа, который мог бы быть предупредительным знаком, что существует другой класс, там изо всех сил пытающийся выходить.

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

6
задан Johann Gerell 30 November 2009 в 09:07
поделиться

1 ответ

  1. Да, сравнение справедливое, особенно при работе с указателями. Каждый из трех либо завершается успешно и возвращает ненулевой указатель целевого типа, либо возвращает null.

  2. Фактически вы можете использовать оператор as при работе с COM-объектами в .NET, что делает его эквивалентным на QueryInterface с небольшими накладными расходами для управляемого взаимодействия / COM. Внутри среды CLR (преобразование между управляемыми типами) оператор as является чрезвычайно легковесным по сравнению с QueryInterface в COM или dynamic_cast в C ++. . Для всех мест в моем коде, где у меня было , чтобы использовать динамическое приведение по какой-то причине, я ' Мы никогда не видели, чтобы оператор as отображал хотя бы один образец в профилировании - и, учитывая, что я поддерживаю реализацию динамически типизированного языка с привязкой ко времени выполнения (StringTemplate), я предполагаю, что это что-то значит. :)

4
ответ дан 17 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

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