|
ScalaTest 1.0
|
|
trait
ConductorFixture
extends AnyRefConductor fixture into tests.
Here's an example of the use of this trait to test the ArrayBlockingQueue
class from java.util.concurrent:
import org.scalatest.fixture.FixtureFunSuite
import org.scalatest.concurrent.ConductorFixture
import org.scalatest.matchers.ShouldMatchers
import java.util.concurrent.ArrayBlockingQueue
class ArrayBlockingQueueSuite extends FixtureFunSuite with ConductorFixture with ShouldMatchers {
test("calling put on a full queue blocks the producer thread") { conductor => import conductor._
val buf = new ArrayBlockingQueue[Int](1)
thread("producer") {
buf put 42
buf put 17
beat should be (1)
}
thread("consumer") {
waitForBeat(1)
buf.take should be (42)
buf.take should be (17)
}
whenFinished {
buf should be ('empty)
}
}
test("calling take on an empty queue blocks the consumer thread") { conductor => import conductor._
val buf = new ArrayBlockingQueue[Int](1)
thread("producer") {
waitForBeat(1)
buf put 42
buf put 17
}
thread("consumer") {
buf.take should be (42)
buf.take should be (17)
beat should be (1)
}
whenFinished {
buf should be ('empty)
}
}
}
For an explanation of how these tests work, see the documentation for Conductor.
| Type Summary | |
type
|
FixtureParam
Defines type
Fixture to be Conductor. |
| Method Summary | |
def
|
withFixture
(test : OneArgTest) : Unit
Creates a new
Conductor, passes the Conductor to the
specified test function, and ensures that conduct gets invoked
on the Conductor. |
| Methods inherited from AnyRef | |
| getClass, hashCode, equals, clone, toString, notify, notifyAll, wait, wait, wait, finalize, ==, !=, eq, ne, synchronized |
| Methods inherited from Any | |
| ==, !=, isInstanceOf, asInstanceOf |
| Type Details |
| Method Details |
def
withFixture(test : OneArgTest) : Unit
Conductor, passes the Conductor to the
specified test function, and ensures that conduct gets invoked
on the Conductor.
After the test function returns (so long as it returns normally and doesn't
complete abruptly with an exception), this method will determine whether the
conduct method has already been called (by invoking
conductingHasBegun on the Conductor). If not,
this method will invoke conduct to ensure that the
multi-threaded scenario is actually conducted.
|
ScalaTest 1.0
|
|