2013-03-17 39 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) 
}  
相關問題