Events 如何使用scalatest检查某些事件是否按特定顺序发生?
我需要测试我的库是否以正确的顺序处理某些(用户定义的)事件。目前,我正在做一些非常简单的事情。我创建了一个缓冲区,并让每个事件向其附加一个不同的值:Events 如何使用scalatest检查某些事件是否按特定顺序发生?,events,scala,scalatest,Events,Scala,Scalatest,我需要测试我的库是否以正确的顺序处理某些(用户定义的)事件。目前,我正在做一些非常简单的事情。我创建了一个缓冲区,并让每个事件向其附加一个不同的值: val buf = new collection.mutable.ArrayBuffer[Int]; val ev1 = () => { buf += 1; } val ev2 = () => { buf += 2; } // // ... library runs the events ... // // check that ev
val buf = new collection.mutable.ArrayBuffer[Int];
val ev1 = () => { buf += 1; }
val ev2 = () => { buf += 2; }
//
// ... library runs the events ...
//
// check that ev2 ocurred before ev1
buf should be (ArrayBuffer(2, 1))
有更好更清晰的方法吗
更新:与此同时,我创建了一个帮助我进行测试的。主类
Event
允许在发生与其他事件相关的计算时包装计算、函数和寄存器。我对scalatest只有一点了解,所以我不知道如何更好地集成它-如果您知道,请提出建议。我知道它几乎是一样的,但是您可以让代码更干净一些。如果需要多次测试事件顺序,可以定义如下特征:
trait EventOrderTester {
val buf = ArrayBuffer.empty[Int]
def ev(order: Int): () => Unit = () => buf += order
lazy val expected = buf.sorted
}
"my test" in new EventOrderTester {
x.addListener1(ev(2))
x.addListener2(ev(1))
//
// ... library runs the events ...
//
// check that listener2 ocurred before listener1
buf should be(expected)
}
然后您可以像这样定义测试:
trait EventOrderTester {
val buf = ArrayBuffer.empty[Int]
def ev(order: Int): () => Unit = () => buf += order
lazy val expected = buf.sorted
}
"my test" in new EventOrderTester {
x.addListener1(ev(2))
x.addListener2(ev(1))
//
// ... library runs the events ...
//
// check that listener2 ocurred before listener1
buf should be(expected)
}