Запись изменений состояния в boost :: statechart - PullRequest
1 голос
/ 16 мая 2011

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

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

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

0 голосов
/ 17 мая 2011

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

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

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

...