2013-03-17 42 views
0

我需要测试我的库是否按正确的顺序处理某些(用户定义的)事件。目前,我正在做一些非常简单的事情。我创建了一个缓冲,让每一个事件的附加不同的值给它:如何使用scalatest检查特定事件是否以特定顺序发生?

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

是否还有更好的,更清晰的方式吗?

更新:同时,我创建了一个tiny toolkit,帮助我进行测试。主类Event允许在计算发生时针对其他事件包装计算和函数和寄存器。我只有一点洞察scalatest所以我不知道如何更好地整合它 - 如果你知道,请建议。

回答

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) 
}  
相关问题