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 に答える