0

我需要测试我的库是否以正确的顺序处理某些(用户定义的)事件。目前,我正在做一些非常简单的事情。我创建了一个缓冲区,并让每个事件都为其附加不同的值:

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只有一点了解,所以我不知道如何更好地整合它——如果你知道,请提出建议。

4

1 回答 1

1

我知道这几乎是一样的,但你可以让你的代码更干净一些。如果您需要多次测试事件顺序,您可以定义如下特征:

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)
}    
于 2013-03-17T22:42:55.017 回答