1

ユニット テストでは、ステート マシン イベントを開始した後、すべてのステート トランザクションを記録しようとしています。
たとえば、イベント A を async_state_machine の fifo_scheduler に post_event A すると、ステート マシンはステート B、C を通過してから D に戻ります。すべてのイベント ステートを記録することはできません。単体テストを行うときに行われました:-(

私が考えることができる唯一のことは、作成したすべての状態のすべての反応メソッドまたはコンストラクターを変更して (simple_state から派生)、それらが記録を行うようにすることです。状態の react() メソッドを呼び出す直前に async_state_machine に本当にフックしたい場合、これは少しハックに思えます...

4

2 に答える 2

0

状態のreact()メソッドを呼び出す直前にasync_state_machineにフックしたい場合、これは少しハックなようです...

どうして?拡張する新しいクラスを作成し、async_state_machineそれに必要なフックを追加します。アクセスに問題がある場合(おそらく問題になるでしょう)、これまでにない壮観なことを行います#define private public(またはprotectedステートチャートを含める前にハックします。

状態の履歴にローカル変数を追加し、新しい種類のstate-ctorを追加するのと同様のことを行ったので、実際の完全な履歴があります。

于 2011-05-17T04:03:06.217 に答える
0

別のハックを追加しました。各状態は、ブースト状態マシンによって使用される前に作成されます (次の状態に移動した後に破棄されます...非常に非効率的です)。そのため、各状態は、コンストラクターにコールバックを持つ別のクラスから派生しました。まだちょっとハックなようです...boost ++にこれを行うためのよりクリーンな方法があればいいのに:-P

于 2011-05-18T12:02:32.460 に答える