Evaluates the passed code block if the passed boolean condition is true, else throws DiscardedEvaluationException.
Evaluates the passed code block if the passed boolean condition is true, else throws DiscardedEvaluationException.
The whenever method can be used inside property check functions to discard invocations of the function with
data for which it is known the property would fail. For example, given the following Fraction class:
class Fraction(n: Int, d: Int) {
require(d != 0) require(d != Integer.MIN_VALUE) require(n != Integer.MIN_VALUE)
val numer = if (d < 0) -1 * n else n val denom = d.abs
override def toString = numer + " / " + denom }
import org.scalatest.prop.TableDrivenPropertyChecks._Imagine you wanted to check a property against this class with data that includes some value that are rejected by the constructor, such as a denominator of zero, which should result in an
val fractions = Table( ("n", "d"), ( 1, 2), ( -1, 2), ( 1, -2), ( -1, -2), ( 3, 1), ( -3, 1), ( -3, 0), ( 3, -1), ( 3, Integer.MIN_VALUE), (Integer.MIN_VALUE, 3), ( -3, -1) )
IllegalArgumentException. You could use whenever
to discard any rows in the fraction that represent illegal arguments, like this:
import org.scalatest.matchers.ShouldMatchers._In this example, rows 6, 8, and 9 have values that would cause a false to be passed to
forAll (fractions) { (n: Int, d: Int) =>
whenever (d != 0 && d != Integer.MIN_VALUE && n != Integer.MIN_VALUE) {
val f = new Fraction(n, d)
if (n < 0 && d < 0 || n > 0 && d > 0) f.numer should be > 0 else if (n != 0) f.numer should be < 0 else f.numer should be === 0
f.denom should be > 0 } }
whenever. (For example, in row 6, d is 0, which means d != 0
will be false.) For those rows, whenever will throw DiscardedEvaluationException,
which will cause the forAll method to discard that row.
the boolean condition that determines whether whenever will evaluate the
fun function (condition is true) or throws DiscardedEvaluationException (condition is false)
the function to evaluate if the specified condition is true
Trait that contains the
wheneverclause that can be used in table- or generator-driven property checks.