Concept trait for futures, instances of which are passed to the whenReady
methods of trait Futures.
Configuration object for asynchronous constructs, such as those provided by traits Eventually and
Waiters.
Configuration object for asynchronous constructs, such as those provided by traits Eventually and
Waiters.
The default values for the parameters are:
| Configuration Parameter | Default Value |
|---|---|
timeout
|
scaled(150 milliseconds)
|
interval
|
scaled(15 milliseconds)
|
the maximum amount of time to wait for an asynchronous operation to complete before giving up and throwing
TestFailedException.
the amount of time to sleep between each check of the status of an asynchronous operation when polling
Returns an Interval configuration parameter containing the passed value, which
specifies the amount of time to sleep after a retry.
Returns an Interval configuration parameter containing the passed value, which
specifies the amount of time to sleep after a retry.
Implicit PatienceConfig value providing default configuration values.
Implicit PatienceConfig value providing default configuration values.
To change the default configuration, override or hide this def with another implicit
PatienceConfig containing your desired default configuration values.
Scales the passed Span by the Double factor returned
by spanScaleFactor.
Scales the passed Span by the Double factor returned
by spanScaleFactor.
The Span is scaled by invoking its scaledBy method,
thus this method has the same behavior:
The value returned by spanScaleFactor can be any positive number or zero,
including a fractional number. A number greater than one will scale the Span
up to a larger value. A fractional number will scale it down to a smaller value. A
factor of 1.0 will cause the exact same Span to be returned. A
factor of zero will cause Span.ZeroLength to be returned.
If overflow occurs, Span.Max will be returned. If underflow occurs,
Span.ZeroLength will be returned.
IllegalArgumentException if the value returned from spanScaleFactor
is less than zero
The factor by which the scaled method will scale Spans.
The factor by which the scaled method will scale Spans.
The default implementation of this method will return the span scale factor that
was specified for the run, or 1.0 if no factor was specified. For example, you can specify a span scale factor when invoking ScalaTest
via the command line by passing a -F argument to Runner.
Returns a Timeout configuration parameter containing the passed value, which
specifies the maximum amount to wait for an asynchronous operation to complete.
Returns a Timeout configuration parameter containing the passed value, which
specifies the maximum amount to wait for an asynchronous operation to complete.
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
The maximum amount of time in milliseconds to tolerate unsuccessful attempts before giving up is configured by the timeout field of
the PatienceConfig passed implicitly as the last parameter.
The interval to sleep between attempts is configured by the interval field of
the PatienceConfig passed implicitly as the last parameter.
If the eitherValue method of the underlying Scala future returns a scala.Some containing a
scala.util.Failure containing a java.util.concurrent.ExecutionException, and this
exception contains a non-null cause, that cause will be included in the TestFailedException as its cause. The
ExecutionException will be be included as the TestFailedException's cause only if the
ExecutionException's cause is null.
the future to query
the function to which pass the future's value when it is ready
an PatienceConfig object containing timeout and
interval parameters that are unused by this method
the result of invoking the fun parameter
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
The maximum amount of time in milliseconds to tolerate unsuccessful attempts before giving up is configured by the timeout field of
the PatienceConfig passed implicitly as the last parameter.
The interval to sleep between attempts is configured by the value contained in the passed
interval parameter.
the future to query
the Interval configuration parameter
the function to which pass the future's value when it is ready
an PatienceConfig object containing timeout and
interval parameters that are unused by this method
the result of invoking the fun parameter
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
The maximum amount of time in milliseconds to tolerate unsuccessful queries before giving up and throwing
TestFailedException is configured by the value contained in the passed
timeout parameter.
The interval to sleep between attempts is configured by the interval field of
the PatienceConfig passed implicitly as the last parameter.
If the eitherValue method of the underlying Scala future returns a scala.Some containing a
scala.util.Failure containing a java.util.concurrent.ExecutionException, and this
exception contains a non-null cause, that cause will be included in the TestFailedException as its cause. The
ExecutionException will be be included as the TestFailedException's cause only if the
ExecutionException's cause is null.
the future to query
the Timeout configuration parameter
the function to which pass the future's value when it is ready
an PatienceConfig object containing timeout and
interval parameters that are unused by this method
the result of invoking the fun parameter
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
Queries the passed future repeatedly until it either is ready, or a configured maximum amount of time has passed, sleeping a configured interval between attempts; and when ready, passes the future's value to the passed function.
The maximum amount of time to tolerate unsuccessful queries before giving up and throwing
TestFailedException is configured by the value contained in the passed
timeout parameter.
The interval to sleep between attempts is configured by the value contained in the passed
interval parameter.
If the eitherValue method of the underlying Scala future returns a scala.Some containing a
scala.util.Failure containing a java.util.concurrent.ExecutionException, and this
exception contains a non-null cause, that cause will be included in the TestFailedException as its cause. The
ExecutionException will be be included as the TestFailedException's cause only if the
ExecutionException's cause is null.
the future to query
the Timeout configuration parameter
the Interval configuration parameter
the function to which pass the future's value when it is ready
an PatienceConfig object containing timeout and
interval parameters that are unused by this method
the result of invoking the fun parameter
Trait that facilitates testing with futures.
This trait defines a
FutureConcepttrait that can be used to implicitly wrap different kinds of futures, thereby providing a uniform testing API for futures. The three ways this trait enables you to test futures are:1. Invoking
isReadyWithin, to assert that a future is ready within a a specified time period. Here's an example:assert(result.isReadyWithin(100 millis))2. Invoking
futureValue, to obtain a futures result within a specified or implicit time period, like this:3. Passing the future to
whenReady, and performing assertions on the result value passed to the given function, as in:whenReady(result) { s => s should be ("hello") }The
whenReadyconstruct periodically inspects the passed future, until it is either ready or the configured timeout has been surpassed. If the future becomes ready before the timeout,whenReadypasses the future's value to the specified function.To make
whenReadymore broadly applicable, the type of future it accepts is aFutureConcept[T], whereTis the type of value promised by the future. Passing a future towhenReadyrequires an implicit conversion from the type of future you wish to pass (the modeled type) toFutureConcept[T]. SubtraitJavaFuturesprovides an implicit conversion fromjava.util.concurrent.Future[T]toFutureConcept[T].For example, the following invocation of
whenReadywould succeed (not throw an exception):However, because the default timeout is 150 milliseconds, the following invocation of
whenReadywould ultimately produce aTestFailedException:Assuming the default configuration parameters, a
timeoutof 150 milliseconds and anintervalof 15 milliseconds, were passed implicitly towhenReady, the detail message of the thrownTestFailedExceptionwould look like:The future passed to whenReady was never ready, so whenReady timed out. Queried 95 times, sleeping 10 milliseconds between each query.Configuration of
whenReadyThe
whenReadymethods of this trait can be flexibly configured. The two configuration parameters forwhenReadyalong with their default values and meanings are described in the following table:TestFailedExceptionThe default values of both timeout and interval are passed to the
scaledmethod, inherited fromScaledTimeSpans, so that the defaults can be scaled up or down together with other scaled time spans. See the documentation for traitScaledTimeSpansfor more information.The
whenReadymethods of traitFutureseach take aPatienceConfigobject as an implicit parameter. This object provides values for the two configuration parameters. TraitFuturesprovides an implicitvalnameddefaultPatiencewith each configuration parameter set to its default value. If you want to set one or more configuration parameters to a different value for all invocations ofwhenReadyin a suite you can override this val (or hide it, for example, if you are importing the members of theFuturescompanion object rather than mixing in the trait). For example, if you always want the defaulttimeoutto be 2 seconds and the defaultintervalto be 5 milliseconds, you can overridedefaultPatience, like this:Or, hide it by declaring a variable of the same name in whatever scope you want the changed values to be in effect:
In addition to taking a
PatienceConfigobject as an implicit parameter, thewhenReadymethods of traitFuturesinclude overloaded forms that take one or twoPatienceConfigParamobjects that you can use to override the values provided by the implicitPatienceConfigfor a singlewhenReadyinvocation. For example, if you want to settimeoutto 6 seconds for just one particularwhenReadyinvocation, you can do so like this:This invocation of
eventuallywill use 6000 fortimeoutand whatever value is specified by the implicitly passedPatienceConfigobject for theintervalconfiguration parameter. If you want to set both configuration parameters in this way, just list them separated by commas:You can also import or mix in the members of
SpanSugarif you want a more concise DSL for expressing time spans:Note: The
whenReadyconstruct was in part inspired by thewhenDeliveredmatcher of the BlueEyes project, a lightweight, asynchronous web framework for Scala.