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)
}