Я должен написать много кода, который имеет дело с последовательными портами. Обычно будет устройство, подключенное в другом конце провода, и я обычно создаю свои собственные насмешки для моделирования их поведения.
Я начинаю смотреть на Moq для помощи с моими модульными тестами. Это довольно просто в использовании это, когда Вам нужен просто тупик, но я хочу знать, возможно ли и если да, как, я создаю насмешку для устройства, которое отвечает по-другому согласно тому, что я хочу протестировать.
Простой пример:
Одно из устройств, с которыми я взаимодействую через интерфейс, получает команду (переместитесь в положение x), отдает сообщение ACK и переходит к "движущемуся" состоянию, пока это не достигает заказанного положения.
Я хочу создать тест, куда я отправляю команду перемещения и затем продолжаю запрашивать состояние, пока это не достигает конечного положения.
Я хочу создать две версии насмешки для двух различных тестов, тот, где я ожидаю, что устройство достигнет конечного положения успешно и другого, где это перестанет работать.
Слишком много спросить?
Если вы используете TDD с mocks, вы должны позволить вашим тестам определять ваши объекты. похоже, что у вас уже есть дизайн, прежде чем писать какие-либо тесты.
В вашем предварительном проекте есть:
Тайм-аут
Это уже обязанности, которые должен выполнять ваш SerialController
. Ничего себе, это сложно реализовать без каких-либо тестов.
Начни легко и легко.
Попробуйте и проверьте с идеей «Последний ответственный момент» .
А как насчет синтаксиса, который вы собираетесь использовать?
Вы можете проверить это: как-проверить-надежность-моей-собственной-небольшой-встроенной-операционной-системы
Я даю ссылки на способ создания оборудования в Atomic Object и блог Джеймса Грининга. У Джеймса есть несколько хороших статей о выполнении TDD с использованием оборудования (не обращайте внимания на вещи Ruby, C и C ++. Если вы занимаетесь аппаратным обеспечением, то вы уже играли с C и C ++ раньше;)).
Кстати, то, что вы делаете, выглядит довольно увлекательно.
Если у вас есть интерфейс для объекта последовательного порта в вашей программе, то Moq может сделать это, создав имитацию объекта последовательного порта (Moq подходит как для заглушек, так и для имитаторов любой сложности).
Если вы хотите перехватить вызовы класса BCL SerialPort
до того, как они достигнут оборудования (без необходимости создания интерфейса последовательного порта и реализации, а также тестовой реализации ), то вам нужно что-то посильнее. Для этого и нужен Moles .
Если вы действительно хотите эмулировать устройство, это выходит за рамки «модульного тестирования». На этом уровне можно использовать com0com , чтобы добавить пару виртуальных последовательных портов и написать эмулятор для вашего устройства, с которым могут взаимодействовать ваши тесты. На этом уровне гораздо сложнее (хотя и возможно) автоматизировать тестирование.