Могу ли я использовать фиктивные объекты для симуляции последовательного порта? - PullRequest
4 голосов
/ 20 апреля 2011

Я разрабатываю приложение на C ++ / CLI, которое связывается с устройством через последовательный порт. и тестирование их с помощью MS Test. Я просто читаю о фиктивных объектах и ​​только поняла это концептуально. Я сталкиваюсь со многими проблемами в модульном тестировании, прежде всего потому, что симулятор, который я использую для отправки данных через последовательный порт в мое приложение, ведет себя определенным образом, и я не могу заставить его изменить его поведение.

Я хотел бы знать:

  • Можно ли использовать фиктивные объекты для имитации поведения последовательного порта? его входной буфер?
  • Могу ли я использовать фиктивный объект, чтобы изменить поведение последовательного порта (т.е. сделать вид, что порт заблокирован).
  • Могут ли макеты использоваться для более базовых классов (например, я хочу протестировать часть моего кода, который выделяет массив. Могу ли я заставить макет сделать вид, что выделение памяти не удалось из-за недостатка памяти)
  • Подходит ли Rhino Mocks для насмешки над приложением C ++ / CLI?
  • Какие-нибудь другие насмешливые фреймворки (желательно бесплатные, но открытые для платных), которые по вашему опыту хороши для этой задачи?
  • Совместимы ли они с MS Test.

1 Ответ

5 голосов
/ 28 февраля 2012

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

Можно ли использовать фиктивные объекты для имитации поведения последовательного порта? его вход буфер

Да, вот довольно хороший пример поддельного UART: http://throwtheswitch.org/white-papers/when-bad-code-runs-green.html

Можно ли использовать фиктивный объект для изменения поведения последовательного порта (т. Е. Чтобы сделать вид, что порт> заблокирован).

Это именно то, что насмешка. Пока ваш код разделен на слои, то есть что-то вроде

  • Уровень аппаратного драйвера
  • Контрольный слой
  • API уровень для внешних модулей

Затем можно смоделировать любой слой, необходимый для имитации действительной операции: полный буфер, сбой оборудования и т. Д.

Можно ли использовать макеты для более базовых классов (например, я хочу протестировать часть моего кода>, которая выделяет массив. Могу ли я получить макет, чтобы сделать вид, что выделение памяти не удалось из-за недостатка памяти)

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

Подходит ли Rhino Mocks для насмешки над приложением C ++ / CLI?

Не уверен насчет этого

Какие-нибудь другие фальшивые фреймворки (желательно бесплатные, но открытые для платных), которые по вашему опыту хороши для этой задачи?

Приведенный выше пример взят из unity + CMock + Ceedling (в основном, это среда тестирования C). Он с открытым исходным кодом и отлично работает для приложений на встроенном Си. Не уверен в поддержке C ++.

Совместимы ли они с MS Test?

Извините, но и этого не знаю

...