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

#unit-testing #mocking #c -cli #serial-port

#модульное тестирование #издевательство #c -cli #serial-port

Вопрос:

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

Что я хотел бы знать, так это:

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

Комментарии:

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

2. Я только что создал этот модуль serialmock.readthedocs.org (немного поздно, я знаю… но мне все еще это было нужно, и я не смог найти ничего, что делает это)

Ответ №1:

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

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

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

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

Именно для этого и существует mocking. Пока ваш код разделен на слои, т. Е. что-то вроде

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

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

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

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

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

Не уверен в этом

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

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

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

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

Комментарии:

1. @Derek Зеркало интернет-архива