【发布时间】:2014-03-20 15:03:24
【问题描述】:
我有一个在各州使用期货的 akka FSM 演员。例如:
when(StateA) {
case Event(str: String, _) =>
if (str == "ping") {
Future("await-ping").pipeTo(self)(sender)
goto(AwaitStateA)
} else {
stay() replying "stay-ping"
}
}
when(AwaitStateA) {
case Event(str: String, _) =>
goto(StateA) replying str
}
使用akka testkit对上面的actor进行测试:
val adaptation: TestFSMRef[State, Data, _ <: Actor]
"Switch between states A" must {
"should return `await-ping`" in {
adaptation ! "ping"
expectMsg("await-ping")
adaptation.stateName should be(StateA)
}
"should return `stay-ping`" in {
adaptation ! "pong"
expectMsg("stay-ping")
adaptation.stateName should be(StateA)
}
}
您可以在 github 上找到完整的测试代码:https://github.com/azhur/fsmtest
问题是测试随机失败(有时它们都通过了)。
测试“应该返回 await-ping”->“AwaitStateA 不等于 StateA”中出现故障。
请帮忙找出我错在哪里。
我尝试从命令行和 IDE (Intellij IDEA) 运行测试。结果是一样的。当我单独运行每个测试时,很难发现失败。
【问题讨论】:
标签: intellij-idea akka fsm