记录boost :: statechart中的状态更改

时间:2011-05-16 19:29:47

标签: c++ boost boost-statechart statechart

对于单元测试,我试图在启动状态机事件后记录所有状态事务 例如,如果我将post_event A发送到async_state_machine的fifo_scheduler,则状态机将通过状态B,C,然后返回到D. 如果不能记录所有事件状态,我只能在进行单元测试后检查它是否进入状态D: - (

我唯一能想到的是修改我创建的所有状态(从simple_state派生)的所有反应方法或构造函数,以便他们进行记录。当我真的想在调用状态的react()方法之前挂钩到async_state_machine时,这似乎有些过时......

2 个答案:

答案 0 :(得分:0)

  

当我真的想在调用状态的react()方法之前挂钩async_state_machine时,这看起来有点像hackish ......

你为什么不呢?创建一个扩展async_state_machine的新类,并将所需的钩子添加到其中。如果访问是一个问题(可能会出现问题),请在包含状态图之前进行壮观的#define private public(或protected黑客攻击。

我已经做了类似的事情,将局部变量添加到状态的历史中,并添加了一种新的状态,因此我拥有真实的完整历史记录。

答案 1 :(得分:0)

添加了一个不同的黑客。每个状态都是在它被boost状态机使用之前创建的(然后在它进入下一个状态后被破坏......看起来效率很低),所以每个状态都是从另一个在其构造函数中有回调的类派生的。 仍然看起来有点hackish ...希望boost ++有一个更清洁的方法来做到这一点:-P