Как я могу создать насмешку SerialPort пользование библиотекой Moq?

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

Я начинаю смотреть на Moq для помощи с моими модульными тестами. Это довольно просто в использовании это, когда Вам нужен просто тупик, но я хочу знать, возможно ли и если да, как, я создаю насмешку для устройства, которое отвечает по-другому согласно тому, что я хочу протестировать.

Простой пример:

Одно из устройств, с которыми я взаимодействую через интерфейс, получает команду (переместитесь в положение x), отдает сообщение ACK и переходит к "движущемуся" состоянию, пока это не достигает заказанного положения.

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

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

Слишком много спросить?

9
задан Anthony Mastrean 14 December 2012 в 03:57
поделиться

2 ответа

Если вы используете TDD с mocks, вы должны позволить вашим тестам определять ваши объекты. похоже, что у вас уже есть дизайн, прежде чем писать какие-либо тесты.

В вашем предварительном проекте есть:

  • Отправитель команды
  • Получатель команд
  • Опрос (асинхронный / синхронный)
  • По следствию у вас должна быть функция Тайм-аут

Это уже обязанности, которые должен выполнять ваш SerialController . Ничего себе, это сложно реализовать без каких-либо тестов.

Начни легко и легко.

Попробуйте и проверьте с идеей «Последний ответственный момент» .

А как насчет синтаксиса, который вы собираетесь использовать?

Вы можете проверить это: как-проверить-надежность-моей-собственной-небольшой-встроенной-операционной-системы

Я даю ссылки на способ создания оборудования в Atomic Object и блог Джеймса Грининга. У Джеймса есть несколько хороших статей о выполнении TDD с использованием оборудования (не обращайте внимания на вещи Ruby, C и C ++. Если вы занимаетесь аппаратным обеспечением, то вы уже играли с C и C ++ раньше;)).

Кстати, то, что вы делаете, выглядит довольно увлекательно.

0
ответ дан 3 November 2019 в 07:12
поделиться

Если у вас есть интерфейс для объекта последовательного порта в вашей программе, то Moq может сделать это, создав имитацию объекта последовательного порта (Moq подходит как для заглушек, так и для имитаторов любой сложности).

Если вы хотите перехватить вызовы класса BCL SerialPort до того, как они достигнут оборудования (без необходимости создания интерфейса последовательного порта и реализации, а также тестовой реализации ), то вам нужно что-то посильнее. Для этого и нужен Moles .

Если вы действительно хотите эмулировать устройство, это выходит за рамки «модульного тестирования». На этом уровне можно использовать com0com , чтобы добавить пару виртуальных последовательных портов и написать эмулятор для вашего устройства, с которым могут взаимодействовать ваши тесты. На этом уровне гораздо сложнее (хотя и возможно) автоматизировать тестирование.

5
ответ дан 3 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

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