Запись изменений состояния в boost::statechart

Для модульного тестирования я пытаюсь записать все транзакции состояния после запуска события конечного автомата.
Например, если я отправлю событие A в fifo_scheduler async_state_machine, конечный автомат пройдет через состояния B, C, а затем обратно в D. Не имея возможности записать все состояния события, я могу только проверить, что он перешел в состояние D после это было сделано при выполнении юнит-теста:-(

Единственное, о чем я могу думать, - это изменить все методы реагирования или конструкторы всех состояний, которые я создаю (производных от simple_state), чтобы они делали запись. Это кажется немного хакерским, когда я действительно хочу подключиться к async_state_machine как раз перед тем, как он вызывает метод response () состояния...

2 ответа

Решение

Это кажется немного хакерским, когда я действительно хочу подключиться к async_state_machine как раз перед тем, как он вызывает метод response () состояния...

Почему не ты? Создайте новый класс, который расширяет async_state_machine и добавьте желаемые крючки в него. Если доступ является проблемой (вероятно, будет), сделайте все возможное #define private public (или же protected взломать, прежде чем включить диаграмму состояний.

Я сделал нечто подобное, чтобы добавить локальные переменные в историю состояния и добавить новый тип state-ctor, чтобы у меня была настоящая полная история.

Добавлен другой хак. Каждое состояние создается до того, как оно используется конечным автоматом форсирования (затем уничтожается после перехода в следующее состояние... кажется таким неэффективным), поэтому каждое состояние было получено из другого класса, который имеет обратный вызов в своем конструкторе. Все еще кажется хаком... желаю, чтобы boost++ имел более чистый способ сделать это:-P

Другие вопросы по тегам