package scalatest
ScalaTest's main traits, classes, and other members, including members supporting ScalaTest's DSL for the Scala interpreter.
- Source
- package.scala
- Alphabetic
- By Inheritance
- scalatest
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Package Members
- package compatible
- package concurrent
Classes, traits, and objects related to testing asynchronous and multi-threaded behavior.
Classes, traits, and objects related to testing asynchronous and multi-threaded behavior.
This package is released as part of the
scalatest-coremodule. - package diagrams
A single traits and companion object that provides a assertions that draw code diagrams on failure.
A single traits and companion object that provides a assertions that draw code diagrams on failure.
This package is released as the
scalatest-diagramsmodule. - package enablers
Classes, traits, and objects for typeclasses that enable ScalaTest's DSLs.
Classes, traits, and objects for typeclasses that enable ScalaTest's DSLs.
This package is released as part of the
scalatest-coremodule. - package events
Classes for events sent to the org.scalatest.Reporter to report the results of running tests.
Classes for events sent to the org.scalatest.Reporter to report the results of running tests.
This package is released as part of the
scalatest-coremodule. - package exceptions
Classes and traits for exceptions thrown by ScalaTest.
Classes and traits for exceptions thrown by ScalaTest.
This package is released as part of the
scalatest-coremodule. - package featurespec
Classes and traits for ScalaTest's
FeatureSpecstyle.Classes and traits for ScalaTest's
FeatureSpecstyle.This package is released as the
scalatest-featurespecmodule. - package fixture
Classes and traits supporting ScalaTest's "fixture" style traits, which allow you to pass fixture objects into tests.
Classes and traits supporting ScalaTest's "fixture" style traits, which allow you to pass fixture objects into tests.
This package is released as part of the
scalatest-coremodule. - package flatspec
Classes and traits for ScalaTest's
FlatSpecstyle.Classes and traits for ScalaTest's
FlatSpecstyle.This package is released as the
scalatest-flatspecmodule. - package freespec
Classes and traits for ScalaTest's
FreeSpecstyle.Classes and traits for ScalaTest's
FreeSpecstyle.This package is released as the
scalatest-freespecmodule. - package funspec
Classes and traits for ScalaTest's
FunSpecstyle.Classes and traits for ScalaTest's
FunSpecstyle.This package is released as the
scalatest-funspecmodule. - package funsuite
Classes and traits for ScalaTest's
FunSuitestyle.Classes and traits for ScalaTest's
FunSuitestyle.This package is released as the
scalatest-funsuitemodule. - package matchers
Classes and traits for matchers.
Classes and traits for matchers.
This package is released as part of the
scalatest-matchers-coremodule. - package path
ScalaTest's old path package that contains deprecated aliases for path style traits.
- package prop
- package propspec
Classes and traits for ScalaTest's
PropSpecstyle.Classes and traits for ScalaTest's
PropSpecstyle.This package is released as the
scalatest-propspecmodule. - package refspec
Classes and traits for ScalaTest's
RefSpecstyle.Classes and traits for ScalaTest's
RefSpecstyle.This package is released as the
scalatest-refspecmodule. - package tagobjects
Singleton-object versions of ScalaTest's built-in tags.
Singleton-object versions of ScalaTest's built-in tags.
This package is released as part of the
scalatest-coremodule. - package tags
- package time
Classes, traits, and objects for ScalaTest's time DSL.
Classes, traits, and objects for ScalaTest's time DSL.
This package is released as part of the
scalatest-coremodule. - package tools
Tools for running ScalaTest.
Tools for running ScalaTest.
This package is released as part of the
scalatest-coremodule. - package verbs
Classes and traits that support ScalaTest DSLs.
Classes and traits that support ScalaTest DSLs.
This package is released as part of the
scalatest-coremodule. - package words
A deprecated package that contained support for ScalaTest DSLs.
- package wordspec
Classes and traits for ScalaTest's
WordSpecstyle.Classes and traits for ScalaTest's
WordSpecstyle.This package is released as the
scalatest-wordspecmodule.
Type Members
- trait Alerter extends AnyRef
Trait providing an
applymethod to which alert messages about a running suite of tests can be reported.Trait providing an
applymethod to which alert messages about a running suite of tests can be reported.An
Alerteris essentially used to wrap aReporterand provide easy ways to send alert messages to thatReportervia anAlertProvidedevent.Alertercontains anapplymethod that takes a string and an optional payload object of typeAny. TheAlerterwill forward the passed alertmessagestring to theReporteras themessageparameter, and the optional payload object as thepayloadparameter, of anAlertProvidedevent.For insight into the differences between
Alerter,Notifier, andInformer, see the main documentation for traitAlerting. - trait Alerting extends AnyRef
Trait that contains the
alertmethod, which can be used to send an alert to the reporter.Trait that contains the
alertmethod, which can be used to send an alert to the reporter.One difference between
alertand theinfomethod ofInformeris thatinfomessages provided during a test are recorded and sent as part of test completion event, whereasalertmessages are sent right away asAlertProvidedmessages. For long-running tests,alertallows you to send "alert notifications" to the reporter right away, so users can be made aware of potential problems being experienced by long-running tests. By contrast,infomessages will only be seen by the user after the test has completed, and are more geared towards specification (such as Given/When/Then messages) than notification.The difference between
alertand theupdatemethod ofUpdatingis thatalertis intended to be used for warnings or notifications of potential problems, whereasupdateis just for status updates. In string reporters for which ANSI color is enabled,updatenotifications are shown in green andalertnotifications in yellow. - trait AppendedClues extends AnyRef
Trait providing an implicit conversion that allows clues to be placed after a block of code.
Trait providing an implicit conversion that allows clues to be placed after a block of code.
You can use the
withClueconstruct provided byAssertions, which is extended by every style trait in ScalaTest, to add extra information to reports of failed or canceled tests. ThewithCluefromAssertionsplaces the "clue string" at the front, both in the code and in the resulting message:withClue("This is a prepended clue;") { 1 + 1 should equal (3) }
The above expression will yield the failure message:
This is a prepended clue; 2 did not equal 3If you mix in this trait, or import its members via its companion object, you can alternatively place the clue string at the end, like this:
{ 1 + 1 should equal (3) } withClue "now the clue comes after"The above expression will yield the failure message:
2 did not equal 3 now the clue comes afterIf no space is already present, either at the beginning of the clue string or at the end of the current message, a space will be placed between the two, unless the clue string starts with one of the punctuation characters: comma (
,), period (.), or semicolon (;). For example, the failure message in the above example includes an extra space inserted between 3 and now.By contrast this code, which has a clue string starting with comma:
{ 1 + 1 should equal (3) } withClue ", now the clue comes after"Will yield a failure message with no extra inserted space:
2 did not equal 3, now the clue comes afterThe
withCluemethod will only append the clue string to the detail message of exception types that mix in theModifiableMessagetrait. See the documentation forModifiableMessagefor more information.Note: the reason this functionality is not provided by
Assertionsdirectly, like the prependedwithClueconstruct, is because appended clues require an implicit conversion. ScalaTest only gives you one implicit conversion by default in any test class to minimize the potential for conflicts with other implicit conversions you may be using. All other implicit conversions, including the one provided by this trait, you must explicitly invite into your code through inheritance or an import. - case class Args(reporter: Reporter, stopper: Stopper = Stopper.default, filter: Filter = Filter.default, configMap: ConfigMap = ConfigMap.empty, distributor: Option[Distributor] = None, tracker: Tracker = Tracker.default, chosenStyles: Set[String] = Set.empty, runTestInNewInstance: Boolean = false, distributedTestSorter: Option[DistributedTestSorter] = None, distributedSuiteSorter: Option[DistributedSuiteSorter] = None) extends Product with Serializable
Arguments bundle passed to four of ScalaTest's lifecycle methods:
run,runNestedSuites,runTests, andrunTest.Arguments bundle passed to four of ScalaTest's lifecycle methods:
run,runNestedSuites,runTests, andrunTest.The signatures of these methods, defined in trait
Suite, are:def run(testName: Option[String], args: Args) def runNestedSuites(args: Args) def runTests(testName: Option[String], args: Args) def runTest(testName: String, args: Args)
The purpose of bundling these arguments into an
Argsobject instead of passing them in individually is to make the signature of these four lifecycle methods easier to read, write, and remember, as well as to make the methods more pleasant to override in user code.- reporter
the
Reporterto which results will be reported- stopper
the
Stopperthat will be consulted to determine whether to stop execution early.- filter
a
Filterwith which to filter tests based on their tags- configMap
a
ConfigMapof key-value pairs that can be used by the executingSuiteof tests.- distributor
an optional
Distributor, into which to put nestedSuites to be executed by another entity, such as concurrently by a pool of threads. IfNone, nestedSuites will be executed sequentially.- tracker
a
TrackertrackingOrdinals being fired by the current thread.- chosenStyles
a (possibly empty)
SetofStrings specifying the run's chosen styles- runTestInNewInstance
a flag used to pass information between run methods in
OneInstancePerTestandParallelTestExecution.- distributedTestSorter
an optional
DistributedTestSorterused byParallelTestExecutionto sort the events for the parallel-executed tests of one suite back into sequential order on the fly, with a timeout in case a test takes too long to complete- distributedSuiteSorter
an optional
DistributedSuiteSorterused byParallelTestExecutionto ensure the events for the parallel-executed suites are sorted back into sequential order, with a timeout in case a suite takes to long to complete, even when tests are executed in parallel
- Exceptions thrown
NullArgumentExceptionif any passed parameter isnull.
- type Assertion = scalatest.compatible.Assertion
Marker trait that serves as the result type of
assert,assume, andpendingmethods of traitAssertions, which return its only instance, theSucceededsingleton, or throw an exception that indicates a failed, canceled, or pending test. - trait Assertions extends TripleEquals
Trait that contains ScalaTest's basic assertion methods.
Trait that contains ScalaTest's basic assertion methods.
You can use the assertions provided by this trait in any ScalaTest
Suite, becauseSuitemixes in this trait. This trait is designed to be used independently of anything else in ScalaTest, though, so you can mix it into anything. (You can alternatively import the methods defined in this trait. For details, see the documentation for theAssertionscompanion object.In any Scala program, you can write assertions by invoking
assertand passing in aBooleanexpression, such as:val left = 2 val right = 1 assert(left == right)
If the passed expression is
true,assertwill return normally. Iffalse, Scala'sassertwill complete abruptly with anAssertionError. This behavior is provided by theassertmethod defined in objectPredef, whose members are implicitly imported into every Scala source file. ThisAssertionstrait defines anotherassertmethod that hides the one inPredef. It behaves the same, except that iffalseis passed it throwsTestFailedExceptioninstead ofAssertionError. Why? Because unlikeAssertionError,TestFailedExceptioncarries information about exactly which item in the stack trace represents the line of test code that failed, which can help users more quickly find an offending line of code in a failing test. In addition, ScalaTest'sassertprovides better error messages than Scala'sassert.If you pass the previous
Booleanexpression,left == righttoassertin a ScalaTest test, a failure will be reported that, becauseassertis implemented as a macro, includes reporting the left and right values. For example, given the same code as above but using ScalaTest assertions:import org.scalatest.Assertions._ val left = 2 val right = 1 assert(left == right)
The detail message in the thrown
TestFailedExceptionfrom thisassertwill be: "2 did not equal 1".ScalaTest's
assertmacro works by recognizing patterns in the AST of the expression passed toassertand, for a finite set of common expressions, giving an error message that an equivalent ScalaTest matcher expression would give. Here are some examples, whereais 1,bis 2,cis 3,dis 4,xsisList(a, b, c), andnumis 1.0:assert(a == b || c >= d) // Error message: 1 did not equal 2, and 3 was not greater than or equal to 4
assert(xs.exists(_ == 4)) // Error message: List(1, 2, 3) did not contain 4
assert("hello".startsWith("h") && "goodbye".endsWith("y")) // Error message: "hello" started with "h", but "goodbye" did not end with "y"
assert(num.isInstanceOf[Int]) // Error message: 1.0 was not instance of scala.Int
assert(Some(2).isEmpty) // Error message: Some(2) was not emptyFor expressions that are not recognized, the macro currently prints out a string representation of the (desugared) AST and adds
"was false". Here are some examples of error messages for unrecognized expressions:assert(None.isDefined) // Error message: scala.None.isDefined was false
assert(xs.exists(i => i > 10)) // Error message: xs.exists(((i: Int) => i.>(10))) was falseYou can augment the standard error message by providing a
Stringas a second argument toassert, like this:val attempted = 2 assert(attempted == 1, "Execution was attempted " + attempted + " times instead of 1 time")
Using this form of
assert, the failure report will be more specific to your problem domain, thereby helping you debug the problem. ThisAssertionstrait also mixes in theTripleEquals, which gives you a===operator that allows you to customizeEquality, perform equality checks with numericTolerance, and enforce type constraints at compile time with sibling traitsTypeCheckedTripleEqualsandConversionCheckedTripleEquals.Expected results
Although the
assertmacro provides a natural, readable extension to Scala'sassertmechanism that provides good error messages, as the operands become lengthy, the code becomes less readable. In addition, the error messages generated for==and===comparisons don't distinguish between actual and expected values. The operands are just calledleftandright, because if one were namedexpectedand the otheractual, it would be difficult for people to remember which was which. To help with these limitations of assertions,Suiteincludes a method calledassertResultthat can be used as an alternative toassert. To useassertResult, you place the expected value in parentheses afterassertResult, followed by curly braces containing code that should result in the expected value. For example:val a = 5 val b = 2 assertResult(2) { a - b }
In this case, the expected value is
2, and the code being tested isa - b. This assertion will fail, and the detail message in theTestFailedExceptionwill read, "Expected 2, but got 3."Forcing failures
If you just need the test to fail, you can write:
fail()
Or, if you want the test to fail with a message, write:
fail("I've got a bad feeling about this")Achieving success
In async style tests, you must end your test body with either
Future[Assertion]orAssertion. ScalaTest's assertions (including matcher expressions) have result typeAssertion, so ending with an assertion will satisfy the compiler. If a test body or function body passed toFuture.mapdoes not end with typeAssertion, however, you can fix the type error by placingsucceedat the end of the test or function body:succeed // Has type AssertionExpected exceptions
Sometimes you need to test whether a method throws an expected exception under certain circumstances, such as when invalid arguments are passed to the method. You can do this in the JUnit 3 style, like this:
val s = "hi" try { s.charAt(-1) fail() } catch { case _: IndexOutOfBoundsException => // Expected, so continue }
If
charAtthrowsIndexOutOfBoundsExceptionas expected, control will transfer to the catch case, which does nothing. If, however,charAtfails to throw an exception, the next statement,fail(), will be run. Thefailmethod always completes abruptly with aTestFailedException, thereby signaling a failed test.To make this common use case easier to express and read, ScalaTest provides two methods:
assertThrowsandintercept. Here's how you useassertThrows:val s = "hi" assertThrows[IndexOutOfBoundsException] { // Result type: Assertion s.charAt(-1) }
This code behaves much like the previous example. If
charAtthrows an instance ofIndexOutOfBoundsException,assertThrowswill returnSucceeded. But ifcharAtcompletes normally, or throws a different exception,assertThrowswill complete abruptly with aTestFailedException.The
interceptmethod behaves the same asassertThrows, except that instead of returningSucceeded,interceptreturns the caught exception so that you can inspect it further if you wish. For example, you may need to ensure that data contained inside the exception have expected values. Here's an example:val s = "hi" val caught = intercept[IndexOutOfBoundsException] { // Result type: IndexOutOfBoundsException s.charAt(-1) } assert(caught.getMessage.indexOf("-1") != -1)
Checking that a snippet of code does or does not compile
Often when creating libraries you may wish to ensure that certain arrangements of code that represent potential “user errors” do not compile, so that your library is more error resistant. ScalaTest's
Assertionstrait includes the following syntax for that purpose:assertDoesNotCompile("val a: String = 1")If you want to ensure that a snippet of code does not compile because of a type error (as opposed to a syntax error), use:
assertTypeError("val a: String = 1")Note that the
assertTypeErrorcall will only succeed if the given snippet of code does not compile because of a type error. A syntax error will still result on a thrownTestFailedException.If you want to state that a snippet of code does compile, you can make that more obvious with:
assertCompiles("val a: Int = 1")Although the previous three constructs are implemented with macros that determine at compile time whether the snippet of code represented by the string does or does not compile, errors are reported as test failures at runtime.
Assumptions
Trait
Assertionsalso provides methods that allow you to cancel a test. You would cancel a test if a resource required by the test was unavailable. For example, if a test requires an external database to be online, and it isn't, the test could be canceled to indicate it was unable to run because of the missing database. Such a test assumes a database is available, and you can use theassumemethod to indicate this at the beginning of the test, like this:assume(database.isAvailable)
For each overloaded
assertmethod, traitAssertionsprovides an overloadedassumemethod with an identical signature and behavior, except theassumemethods throwTestCanceledExceptionwhereas theassertmethods throwTestFailedException. As withassert,assumehides a Scala method inPredefthat performs a similar function, but throwsAssertionError. And just as you can withassert, you will get an error message extracted by a macro from the AST passed toassume, and can optionally provide a clue string to augment this error message. Here are some examples:assume(database.isAvailable, "The database was down again") assume(database.getAllUsers.count === 9)
Forcing cancelations
For each overloaded
failmethod, there's a correspondingcancelmethod with an identical signature and behavior, except thecancelmethods throwTestCanceledExceptionwhereas thefailmethods throwTestFailedException. Thus if you just need to cancel a test, you can write:cancel()
If you want to cancel the test with a message, just place the message in the parentheses:
cancel("Can't run the test because no internet connection was found")Getting a clue
If you want more information that is provided by default by the methods if this trait, you can supply a "clue" string in one of several ways. The extra information (or "clues") you provide will be included in the detail message of the thrown exception. Both
assertandassertResultprovide a way for a clue to be included directly,interceptdoes not. Here's an example of clues provided directly inassert:assert(1 + 1 === 3, "this is a clue")
and in
assertResult:assertResult(3, "this is a clue") { 1 + 1 }
The exceptions thrown by the previous two statements will include the clue string,
"this is a clue", in the exception's detail message. To get the same clue in the detail message of an exception thrown by a failedinterceptcall requires usingwithClue:withClue("this is a clue") { intercept[IndexOutOfBoundsException] { "hi".charAt(-1) } }
The
withCluemethod will only prepend the clue string to the detail message of exception types that mix in theModifiableMessagetrait. See the documentation forModifiableMessagefor more information. If you wish to place a clue string after a block of code, see the documentation forAppendedClues.Note: ScalaTest's
assertTypeErrorconstruct is in part inspired by theillTypedmacro of shapeless. - trait AsyncTestSuite extends Suite with RecoverMethods with CompleteLastly
The base trait of ScalaTest's asynchronous testing styles, which defines a
withFixturelifecycle method that accepts as its parameter a test function that returns aFutureOutcome.The base trait of ScalaTest's asynchronous testing styles, which defines a
withFixturelifecycle method that accepts as its parameter a test function that returns aFutureOutcome.The
withFixturemethod add by this trait has the following signature and implementation:def withFixture(test: NoArgAsyncTest): FutureOutcome = { test() }
This trait enables testing of asynchronous code without blocking. Instead of returning
OutcomelikeTestSuite'swithFixture, this trait'swithFixturemethod returns aFutureOutcome. Similarly, theapplymethod of test function interface,NoArgAsyncTest, returnsFutureOutcome:// In trait NoArgAsyncTest: def apply(): FutureOutcome
The
withFixturemethod supports async testing, because when the test function returns, the test body has not necessarily finished execution.The recommended way to ensure cleanup is performed after a test body finishes execution is to use a
complete-lastlyclause, syntax that is defined in traitCompleteLastly, which this trait extends. Usingcleanup-lastlywill ensure that cleanup will occur whetherFutureOutcome-producing code completes abruptly by throwing an exception, or returns normally yielding aFutureOutcome. In the latter case,complete-lastlywill register the cleanup code to execute asynchronously when theFutureOutcomecompletes.The
withFixturemethod is designed to be stacked, and to enable this, you should always call thesuperimplementation ofwithFixture, and let it invoke the test function rather than invoking the test function directly. In other words, instead of writing “test()”, you should write “super.withFixture(test)”. Thus, the recommended structure of awithFixtureimplementation that performs cleanup looks like this:// Your implementation override def withFixture(test: NoArgAsyncTest) = { // Perform setup here complete { super.withFixture(test) // Invoke the test function } lastly { // Perform cleanup here } }
If you have no cleanup to perform, you can write
withFixturelike this instead:// Your implementation override def withFixture(test: NoArgAsyncTest) = { // Perform setup here super.withFixture(test) // Invoke the test function }
The test function and
withFixturemethod returns aFutureOutcome, a ScalaTest class that wraps a ScalaFuture[Outcome]and offers methods more specific to asynchronous test outcomes. In a ScalaFuture, any exception results in ascala.util.Failure. In aFutureOutcome, a thrownTestPendingExceptionalways results in aPending, a thrownTestCanceledExceptionalways results in aCanceled, and any other exception, so long as it isn't suite-aborting, results in aFailed. This is true of the asynchronous test code itself that's represented by theFutureOutcomeand any transformation or callback registered on theFutureOutcomeinwithFixture.If you want to perform an action only for certain outcomes, you'll need to register code performing that action on the
FutureOutcomeusing one ofFutureOutcome's callback registration methods:onSucceededThen- executed if theOutcomeis aSucceeded.onFailedThen- executed if theOutcomeis aFailed.onCanceledThen- executed if theOutcomeis aCanceled.onPendingThen- executed if theOutcomeis aPending.onOutcomeThen- executed on anyOutcome(i.e., no suite-aborting exception is thrown).onAbortedThen- executed if a suite-aborting exception is thrown.onCompletedThen- executed whether the result is anOutcomeor a thrown suite-aborting exception.
For example, if you want to perform an action if a test fails, you'd register the callback using
onFailedThen, like this:// Your implementation override def withFixture(test: NoArgAsyncTest) = {
// Perform setup here
val futureOutcome = super.withFixture(test) // Invoke the test function
futureOutcome onFailedThen { ex => // perform action that you want to occur // only if a test fails here } }Note that all callback registration methods, such as
onFailedThenused in the previous example, return a newFutureOutcomethat won't complete until the the originalFutureOutcomeand the callback has completed. If the callback throws an exception, the resultingFutureOutcomewill represent that exception. For example, if aFutureOutcomeresults inFailed, but a callback registered on thatFutureOutcomewithonFailedThenthrowsTestPendingException, the result of theFutureOutcomereturned byonFailedThenwill bePending.Lastly, if you want to change the outcome in some way in
withFixture, you'll need to use thechangemethod ofFutureOutcome, like this:// Your implementation override def withFixture(test: NoArgAsyncTest) = {
// Perform setup here
val futureOutcome = super.withFixture(test) // Invoke the test function
futureOutcome change { outcome => // transform the outcome into a new outcome here } } - trait AsyncTestSuiteMixin extends SuiteMixin
Trait defining abstract "lifecycle" methods that are implemented in
AsyncTestSuiteand can be overridden in stackable modification traits.Trait defining abstract "lifecycle" methods that are implemented in
AsyncTestSuiteand can be overridden in stackable modification traits.The main use case for this trait is to override
withFixturein a mixin trait. Here's an example:trait Builder extends AsyncTestSuiteMixin { this: AsyncTestSuite =>
final val builder = new ThreadSafeStringBuilder
abstract override def withFixture(test: NoArgAsyncTest) = { builder.append("ScalaTest is ") complete { super.withFixture(test) // To be stackable, must call super.withFixture } lastly { builder.clear() } } } - trait BeforeAndAfter extends SuiteMixin
Trait that can be mixed into suites that need code executed before and after running each test.
Trait that can be mixed into suites that need code executed before and after running each test.
Recommended Usage: Use trait BeforeAndAfterwhen you need to perform the same side-effects before and/or after tests, rather than at the beginning or end of tests. Note: For more insight into whereBeforeAndAfterfits into the big picture, see the Shared fixtures section in the documentation for your chosen style trait.A test fixture is composed of the objects and other artifacts (files, sockets, database connections, etc.) tests use to do their work. When multiple tests need to work with the same fixtures, it is important to try and avoid duplicating the fixture code across those tests. The more code duplication you have in your tests, the greater drag the tests will have on refactoring the actual production code. Trait
BeforeAndAfteroffers one way to eliminate such code duplication: abeforeclause that will register code to be run before each test, and anafterclause that will register code to be run after.Here's an example:
package org.scalatest.examples.flatspec.beforeandafter
import org.scalatest._ import collection.mutable.ListBuffer
class ExampleSpec extends FlatSpec with BeforeAndAfter {
val builder = new StringBuilder val buffer = new ListBuffer[String]
before { builder.append("ScalaTest is ") }
after { builder.clear() buffer.clear() }
"Testing" should "be easy" in { builder.append("easy!") assert(builder.toString === "ScalaTest is easy!") assert(buffer.isEmpty) buffer += "sweet" }
it should "be fun" in { builder.append("fun!") assert(builder.toString === "ScalaTest is fun!") assert(buffer.isEmpty) } }The
beforeandaftermethods can each only be called once perSuite, and cannot be invoked afterrunhas been invoked. If either of the registered before or after functions complete abruptly with an exception, it will be reported as an aborted suite and no more tests will be attempted in that suite.Note that the only way
beforeandaftercode can communicate with test code is via some side-effecting mechanism, commonly by reassigning instancevars or by changing the state of mutable objects held from instancevals (as in this example). If using instancevars or mutable objects held from instancevals you wouldn't be able to run tests in parallel in the same instance of the test class unless you synchronized access to the shared, mutable state. This is why ScalaTest'sParallelTestExecutiontrait extendsOneInstancePerTest. By running each test in its own instance of the class, each test has its own copy of the instance variables, so you don't need to synchronize. Were you to mixParallelTestExecutioninto theExampleSuiteabove, the tests would run in parallel just fine without any synchronization needed on the mutableStringBuilderandListBuffer[String]objects.Although
BeforeAndAfterprovides a minimal-boilerplate way to execute code before and after tests, it isn't designed to enable stackable traits, because the order of execution would be non-obvious. If you want to factor out before and after code that is common to multiple test suites, you should use traitBeforeAndAfterEachinstead.The advantage this trait has over
BeforeAndAfterEachis that its syntax is more concise. The main disadvantage is that it is not stackable, whereasBeforeAndAfterEachis. I.e., you can write several traits that extendBeforeAndAfterEachand providebeforeEachmethods that include a call tosuper.beforeEach, and mix them together in various combinations. By contrast, only one call to thebeforeregistration function is allowed in a suite or spec that mixes inBeforeAndAfter. In addition,BeforeAndAfterEachallows you to access the config map and test name via theTestDatapassed to itsbeforeEachandafterEachmethods, whereasBeforeAndAftergives you no access to the config map. - trait BeforeAndAfterAll extends SuiteMixin
Stackable trait that can be mixed into suites that need methods invoked before and after executing the suite.
Stackable trait that can be mixed into suites that need methods invoked before and after executing the suite.
This trait allows code to be executed before and/or after all the tests and nested suites of a suite are run. This trait overrides
runand calls thebeforeAllmethod, then callssuper.run. After thesuper.runinvocation completes, whether it returns normally or completes abruptly with an exception, this trait'srunmethod will invokeafterAll.Trait
BeforeAndAfterAlldefinesbeforeAllandafterAllmethods that take no parameters. This trait's implementation of these methods do nothing.For example, the following
ExampleSpecmixes inBeforeAndAfterAlland inbeforeAll, creates and writes to a temp file. Each test class,ExampleSpecand all its nested suites--OneSpec,TwoSpec,RedSpec, andBlueSpec--tests that the file exists. After all of the nested suites have executed,afterAllis invoked, which deletes the file. (Note: if you're unfamiliar with thewithFixture(OneArgTest)approach to shared fixtures, check out the documentation for traitfixture.FlatSpec.)package org.scalatest.examples.beforeandafterall
import org.scalatest._ import java.io._
trait TempFileExistsSpec extends fixture.FlatSpecLike {
protected val tempFileName = "tmp.txt"
type FixtureParam = File override def withFixture(test: OneArgTest) = { val file = new File(tempFileName) withFixture(test.toNoArgTest(file)) // loan the fixture to the test }
"The temp file" should ("exist in " + suiteName) in { file => assert(file.exists) } }
class OneSpec extends TempFileExistsSpec class TwoSpec extends TempFileExistsSpec class RedSpec extends TempFileExistsSpec class BlueSpec extends TempFileExistsSpec
class ExampleSpec extends Suites( new OneSpec, new TwoSpec, new RedSpec, new BlueSpec ) with TempFileExistsSpec with BeforeAndAfterAll {
// Set up the temp file needed by the test, taking // a file name from the config map override def beforeAll() { val writer = new FileWriter(tempFileName) try writer.write("Hello, suite of tests!") finally writer.close() }
// Delete the temp file override def afterAll() { val file = new File(tempFileName) file.delete() } }If you do supply a mapping for
"tempFileName"in the config map, you'll see that the temp file is available to all the tests:scala> org.scalatest.run(new ExampleSpec) ExampleSpec: OneSpec: The temp file - should exist in OneSpec TwoSpec: The temp file - should exist in TwoSpec RedSpec: The temp file - should exist in RedSpec BlueSpec: The temp file - should exist in BlueSpec The temp file - should exist in ExampleSpecNote: this trait uses the
Statusresult ofSuite's "run" methods to ensure that the code inafterAllis executed after all the tests and nested suites are executed even if aDistributoris passed.Note that it is not guaranteed that
afterAllis invoked from the same thread asbeforeAll, so if there's any shared state betweenbeforeAllandafterAllyou'll need to make sure they are synchronized correctly. - trait BeforeAndAfterAllConfigMap extends SuiteMixin
Trait that can be mixed into suites that need methods that make use of the config map invoked before and/or after executing the suite.
Trait that can be mixed into suites that need methods that make use of the config map invoked before and/or after executing the suite.
This trait allows code to be executed before and/or after all the tests and nested suites of a suite are run. This trait overrides
runand calls thebeforeAll(ConfigMap)method, then callssuper.run. After thesuper.runinvocation completes, whether it returns normally or completes abruptly with an exception, this trait'srunmethod will invokeafterAll(ConfigMap).Note that this trait differs from
BeforeAndAfterAllin that it gives thebeforeAllandafterAllcode access to the config map. If you don't need the config map, useBeforeAndAfterAllinstead.Trait
BeforeAndAfterAllConfigMapdefinesbeforeAllandafterAllmethods that take aconfigMap. This trait's implemention of each method does nothing.For example, the following
ExampleSpecmixes inBeforeAndAfterAllConfigMapand inbeforeAll, creates and writes to a temp file, taking the name of the temp file from theconfigMap. This sameconfigMapis then passed to therunmethods of the nested suites,OneSpec,TwoSpec,RedSpec, andBlueSpec, so those suites can access the filename and, therefore, the file's contents. After all of the nested suites have executed,afterAllis invoked, which again grabs the file name from theconfigMapand deletes the file. Each of these five test classes extend traitTempFileExistsSpec, which defines a test that ensures the temp file exists. (Note: if you're unfamiliar with thewithFixture(OneArgTest)approach to shared fixtures, check out the documentation for traitfixture.FlatSpec.)package org.scalatest.examples.beforeandafterallconfigmap
import org.scalatest._ import java.io._
trait TempFileExistsSpec extends fixture.FlatSpec {
type FixtureParam = File override def withFixture(test: OneArgTest) = { val fileName = test.configMap.getRequired[String]("tempFileName") val file = new File(fileName) withFixture(test.toNoArgTest(file)) // loan the fixture to the test }
"The temp file" should ("exist in " + suiteName) in { file => assert(file.exists) } }
class OneSpec extends TempFileExistsSpec class TwoSpec extends TempFileExistsSpec class RedSpec extends TempFileExistsSpec class BlueSpec extends TempFileExistsSpec
class ExampleSpec extends Suites( new OneSpec, new TwoSpec, new RedSpec, new BlueSpec ) with TempFileExistsSpec with BeforeAndAfterAllConfigMap {
private val tempFileName = "tempFileName"
// Set up the temp file needed by the test, taking // a file name from the config map override def beforeAll(cm: ConfigMap) { assume( cm.isDefinedAt(tempFileName), "must place a temp file name in the config map under the key: " + tempFileName ) val fileName = cm.getRequired[String](tempFileName) val writer = new FileWriter(fileName) try writer.write("Hello, suite of tests!") finally writer.close() }
// Delete the temp file override def afterAll(cm: ConfigMap) { val fileName = cm.getRequired[String]("tempFileName") val file = new File(fileName) file.delete() } }Running the above class in the interpreter will give an error if you don't supply a mapping for
"tempFileName"in the config map:scala> org.scalatest.run(new ExampleSpec) ExampleSpec: Exception encountered when invoking run on a suite. *** ABORTED *** Exception encountered when invoking run on a suite. (
:30) *** RUN ABORTED *** An exception or error caused a run to abort: must place a temp file name in the config map under the key: tempFileName ( :30) If you do supply a mapping for
"tempFileName"in the config map, you'll see that the temp file is available to all the tests:scala> (new ExampleSpec).execute(configMap = ConfigMap("tempFileName" -> "tmp.txt")) ExampleSpec: OneSpec: The temp file - should exist in OneSpec TwoSpec: The temp file - should exist in TwoSpec RedSpec: The temp file - should exist in RedSpec BlueSpec: The temp file - should exist in BlueSpec The temp file - should exist in ExampleSpecNote: As of 2.0.M5, this trait uses the newly added
Statusresult ofSuite's "run" methods to ensure that the code inafterAllis executed after all the tests and nested suites are executed even if aDistributoris passed.Note that it is not guaranteed that
afterAllis invoked from the same thread asbeforeAll, so if there's any shared state betweenbeforeAllandafterAllyou'll need to make sure they are synchronized correctly. - trait BeforeAndAfterEach extends SuiteMixin
Stackable trait that can be mixed into suites that need code executed before and/or after running each test.
Stackable trait that can be mixed into suites that need code executed before and/or after running each test.
Recommended Usage: Use trait BeforeAndAfterEachwhen you want to stack traits that perform side-effects before and/or after tests, rather than at the beginning or end of tests. Note: For more insight into whereBeforeAndAfterEachfits into the big picture, see the Shared fixtures section in the documentation for your chosen style trait.A test fixture is composed of the objects and other artifacts (files, sockets, database connections, etc.) tests use to do their work. When multiple tests need to work with the same fixtures, it is important to try and avoid duplicating the fixture code across those tests. The more code duplication you have in your tests, the greater drag the tests will have on refactoring the actual production code, and the slower your compile will likely be. Trait
BeforeAndAfterEachoffers one way to eliminate such code duplication: abeforeEachmethod that will be run before each test (like JUnit'ssetUp), and anafterEachmethod that will be run after (like JUnit'stearDown).Here's an example:
package org.scalatest.examples.flatspec.composingbeforeandaftereach
import org.scalatest._ import collection.mutable.ListBuffer
trait Builder extends BeforeAndAfterEach { this: Suite =>
val builder = new StringBuilder
override def beforeEach() { builder.append("ScalaTest is ") super.beforeEach() // To be stackable, must call super.beforeEach }
override def afterEach() { try { super.afterEach() // To be stackable, must call super.afterEach } finally { builder.clear() } } }
trait Buffer extends BeforeAndAfterEach { this: Suite =>
val buffer = new ListBuffer[String]
override def afterEach() { try { super.afterEach() // To be stackable, must call super.afterEach } finally { buffer.clear() } } }
class ExampleSpec extends FlatSpec with Builder with Buffer {
"Testing" should "be easy" in { builder.append("easy!") assert(builder.toString === "ScalaTest is easy!") assert(buffer.isEmpty) buffer += "sweet" }
it should "be fun" in { builder.append("fun!") assert(builder.toString === "ScalaTest is fun!") assert(buffer.isEmpty) buffer += "clear" } }To get the same ordering as
withFixture, place yoursuper.beforeEachcall at the end of eachbeforeEachmethod, and thesuper.afterEachcall at the beginning of eachafterEachmethod, as shown in the previous example. It is a good idea to invokesuper.afterEachin atryblock and perform cleanup in afinallyclause, as shown in the previous example, because this ensures the cleanup code is performed even ifsuper.afterEachthrows an exception.The main advantage of
BeforeAndAfterEachoverBeforeAndAfteris thatBeforeAndAfterEach. enables trait stacking. The main disadvantage ofBeforeAndAfterEachcompared toBeforeAndAfteris thatBeforeAndAfterEachrequires more boilerplate. If you don't need trait stacking, useBeforeAndAfterinstead ofBeforeAndAfterEach. If you want to make use of test data (the test name, config map, etc.) in yourbeforeEachorafterEachmethod, use traitBeforeAndAfterEachTestDatainstead. - trait BeforeAndAfterEachTestData extends SuiteMixin
Stackable trait that can be mixed into suites that need code that makes use of test data (test name, tags, config map, etc.) executed before and/or after running each test.
Stackable trait that can be mixed into suites that need code that makes use of test data (test name, tags, config map, etc.) executed before and/or after running each test.
Recommended Usage: Use trait BeforeAndAfterEachTestDatawhen you want to stack traits that perform side-effects before and/or after tests, rather than at the beginning or end of tests, when you need access to any test data (such as the config map) in the before and/or after code. Note: For more insight into whereBeforeAndAfterEachTestDatafits into the big picture, see the Shared fixtures section in the documentation for your chosen style trait.A test fixture is composed of the objects and other artifacts (files, sockets, database connections, etc.) tests use to do their work. When multiple tests need to work with the same fixtures, it is important to try and avoid duplicating the fixture code across those tests. The more code duplication you have in your tests, the greater drag the tests will have on refactoring the actual production code. Trait
BeforeAndAfterEachTestDataoffers one way to eliminate such code duplication: abeforeEach(TestData)method that will be run before each test (like JUnit'ssetUp), and anafterEach(TestData)method that will be run after (like JUnit'stearDown).Here's an example:
package org.scalatest.examples.flatspec.composingbeforeandaftereachtestdata
import org.scalatest._ import collection.mutable.ListBuffer
trait Builder extends BeforeAndAfterEachTestData { this: Suite =>
val builder = new StringBuilder
override def beforeEach(td: TestData) { builder.append(td.name) super.beforeEach(td) // To be stackable, must call super.beforeEach(TestData) }
override def afterEach(td: TestData) { try { super.afterEach(td) // To be stackable, must call super.afterEach(TestData) } finally { builder.clear() } } }
trait Buffer extends BeforeAndAfterEachTestData { this: Suite =>
val buffer = new ListBuffer[String]
override def afterEach(td: TestData) { try { super.afterEach(td) // To be stackable, must call super.afterEach(TestData) } finally { buffer.clear() } } }
class ExampleSpec extends FlatSpec with Builder with Buffer {
"Testing" should "be easy" in { builder.append("!") assert(builder.toString === "Testing should be easy!") assert(buffer.isEmpty) buffer += "sweet" }
it should "be fun" in { builder.append("!") assert(builder.toString === "Testing should be fun!") assert(buffer.isEmpty) buffer += "clear" } }To get the same ordering as
withFixture, place yoursuper.beforeEach(TestData)call at the end of eachbeforeEach(TestData)method, and thesuper.afterEach(TestData)call at the beginning of eachafterEach(TestData)method, as shown in the previous example. It is a good idea to invokesuper.afterEach(TestData)in atryblock and perform cleanup in afinallyclause, as shown in the previous example, because this ensures the cleanup code is performed even ifsuper.afterEach(TestData)throws an exception.Besides enabling trait stacking, the other main advantage of
BeforeAndAfterEachTestDataoverBeforeAndAfteris thatBeforeAndAfterEachTestDataallows you to make use of test data (such as the test name and config map) in your before and/or after code, whereasBeforeAndAfterdoes not.The main disadvantage of
BeforeAndAfterEachTestDatacompared toBeforeAndAfterandBeforeAndAfterEachis thatBeforeAndAfterEachTestDatarequires more boilerplate. If you don't need trait stacking or access to the test data, useBeforeAndAfterinstead ofBeforeAndAfterEachTestData. If you need trait stacking, but not access to theTestData, useBeforeAndAfterEachinstead. - trait CancelAfterFailure extends TestSuiteMixin
Trait that when mixed into a
TestSuitecancels any remaining tests in thatTestSuiteinstance after a test fails.Trait that when mixed into a
TestSuitecancels any remaining tests in thatTestSuiteinstance after a test fails.The intended use case for this trait is if you have a suite of long-running tests that are related such that if one fails, you aren't interested in running the others, you can use this trait to simply cancel any remaining tests, so you need not wait long for them to complete.
Note that this trait only cancels tests in the same
TestSuiteinstance, because it uses a private volatile instance variable as a flag to indicate whether or not a test has failed. If you are running each test in its own instance, therefore, it would not cancel the remaining tests, because they would not see the same flag. For this reason, this trait contains a final implementation of a method defined inOneInstancePerTest, to prevent it from being mixed into any class that also mixes inOneInstancePerTest, including by mixing inParallelTestExecutionor a path trait. - case class Canceled(exception: TestCanceledException) extends Exceptional with Product with Serializable
Outcome for a test that was canceled, containing an exception describing the cause of the cancelation.
- trait Checkpoints extends AnyRef
Trait providing class
Checkpoint, which enables multiple assertions to be performed within a test, with any failures accumulated and reported together at the end of the test.Trait providing class
Checkpoint, which enables multiple assertions to be performed within a test, with any failures accumulated and reported together at the end of the test.Because ScalaTest uses exceptions to signal failed assertions, normally execution of a test will stop as soon as the first failed assertion is encountered. Trait
Checkpointsprovides an option when you want to continue executing the remainder of the test body, or part of it, even if an assertion has already failed in that test.To use a
Checkpoint(once you've mixed in or imported the members of traitCheckpoints), you first need to create one, like this:val cp = new Checkpoint
Then give the
Checkpointassertions to execute by passing them (via a by-name parameter) to itsapplymethod, like this:val (x, y) = (1, 2) cp { x should be < 0 } cp { y should be > 9 }
Both of the above assertions will fail, but it won't be reported yet. The
Checkpointwill execute them right away, each time itsapplymethod is invoked. But it will catch theTestFailedExceptionsand save them, only reporting them later whenreportAllis invoked. Thus, at the end of the test, you must callreportAll, like this:cp.reportAll()
This
reportAllinvocation will complete abruptly with aTestFailedExceptionwhose message includes the message, source file, and line number of each of the checkpointed assertions that previously failed. For example:1 was not less than 0 (in Checkpoint) at ExampleSpec.scala:12 2 was not greater than 9 (in Checkpoint) at ExampleSpec.scala:13
Make sure you invoke
reportAllbefore the test completes, otherwise any failures that were detected by theCheckpointwill not be reported.Note that a
Checkpointwill catch and record for later reporting (viareportAll) exceptions that mix inStackDepthexcept forTestCanceledException,TestRegistrationClosedException,NotAllowedException, andDuplicateTestNameException. If a block of code passed to aCheckpoint'sapplymethod completes abruptly with any of theStackDepthexceptions in the previous list, or any non-StackDepthexception, that invocation of theapplymethod will complete abruptly with the same exception immediately. Unless you putreportAllin a finally clause and handle this case, such an unexpected exception will cause you to lose any information about assertions that failed earlier in the test and were recorded by theCheckpoint. - trait CompleteLastly extends AnyRef
Trait that provides a
complete-lastlyconstruct, which ensures cleanup code inlastlyis executed whether the code passed tocompletecompletes abruptly with an exception or successfully results in aFuture,FutureOutcome, or other type with an implicitFuturisticinstance.Trait that provides a
complete-lastlyconstruct, which ensures cleanup code inlastlyis executed whether the code passed tocompletecompletes abruptly with an exception or successfully results in aFuture,FutureOutcome, or other type with an implicitFuturisticinstance.This trait is mixed into ScalaTest's async testing styles, to make it easy to ensure cleanup code will execute whether code that produces a "futuristic" value (any type
Ffor which aFuturistic[F]instance is implicitly available). ScalaTest provides implicitFuturisticinstances forFuture[T]for any typeTandFutureOutcome.If the future-producing code passed to
completethrows an exception, the cleanup code passed tolastlywill be executed immediately, and the same exception will be rethrown, unless the code passed tolastlyalso completes abruptly with an exception. In that case,complete-lastlywill complete abruptly with the exception thrown by the code passed tolastly(this mimics the behavior offinally).Otherwise, if the code passed to
completesuccessfully returns aFuture(or other "futuristic" type),complete-lastlywill register the cleanup code to be performed once the future completes and return a new future that will complete once the original future completes and the subsequent cleanup code has completed execution. The future returned bycomplete-lastlywill have the same result as the original future passed tocomplete, unless the cleanup code throws an exception. If the cleanup code passed tolastlythrows an exception, the future returned bylastlywill fail with that exception.The
complete-lastlysyntax is intended to be used to ensure cleanup code is executed in async testing styles liketry-finallyis used in traditional testing styles. Here's an example ofcomplete-lastlyused inwithFixturein an async testing style:// Your implementation override def withFixture(test: NoArgAsyncTest) = {
// Perform setup here
complete { super.withFixture(test) // Invoke the test function } lastly { // Perform cleanup here } } - final class CompositeStatus extends Status with Serializable
Composite
Statusthat aggregates its completion and failed states of set of otherStatuses passed to its constructor. - class ConfigMap extends Map[String, Any] with Serializable
A map of configuration data.
A map of configuration data.
A
ConfigMapcan be populated from theRunnercommand line via-Darguments.Runnerpasses it to many methods where you can use it to configure your test runs. For example,Runnerpassed theConfigMapto:- the
applymethod ofReporters viaRunStartingevents - the
runmethod ofSuite - the
runNestedSuitesmethod ofSuite - the
runTestsmethod ofSuite - the
runTestmethod ofSuite - the
withFixture(NoArgTest)method ofSuite - the
withFixture(OneArgTest)method offixture.Suite - the
beforeEach(TestData)method ofBeforeAndAfterEachTestData - the
afterEach(TestData)method ofBeforeAndAfterEachTestData
In addition to accessing the
ConfigMapin overriden implementations of the above methods, you can also transform and pass along a modifiedConfigMap.A
ConfigMapmaps string keys to values of any type, i.e., it is aMap[String, Any]. To get a configuration value in a variable of the actual type of that value, therefore, you'll need to perform an unsafe cast. If this cast fails, you'll get an exception, which so long as theConfigMapis used only in tests, will result in either a failed or canceled test or aborted suite. To give such exceptions nice stack depths and error messages, and to eliminate the need for usingasInstanceOfin your test code,ConfigMapprovides three methods for accessing values at expected types.The
getRequiredmethod returns the value bound to a key cast to a specified type, or throwsTestCanceledExceptionif either the key is not bound or is bound to an incompatible type. Here's an example:val tempFileName: String = configMap.getRequired[String]("tempFileName")
The
getOptionalmethod returns the value bound to a key cast to a specified type, wrapped in aSome, returnsNoneif the key is not bound, or throws TestCanceledException if the key exists but is bound to an incompatible type. Here's an example:val tempFileName: Option[String] = configMap.getOptional[String]("tempFileName")
The
getWithDefaultmethod returns the value bound to a key cast to a specified type, returns a specified default value if the key is not bound, or throws TestCanceledException if the key exists but is either not bound or is bound to an incompatible type. Here's an example:val tempFileName: String = configMap.getWithDefault[String]("tempFileName", "tmp.txt")
- the
- final class ConfigMapWrapperSuite extends Suite
Wrapper
Suitethat passes an instance of the config map to the constructor of the wrappedSuitewhenrunis invoked.Wrapper
Suitethat passes an instance of the config map to the constructor of the wrappedSuitewhenrunis invoked.Recommended Usage: Trait ConfigMapWrapperSuiteis primarily intended to be used with the "path" traits, which can't use the usual approaches to accessing the config map because of the eager manner in which they run tests.Each time
runis invoked on an instance ofConfigMapWrapperSuite, this suite will create a new instance of the suite to wrap, passing to the constructor the config map passed torun. This way, if the sameConfigMapWrapperSuiteinstance is run multiple times, each time with a different config map, an instance of the wrapped suite will be created for each config map. In addition to being passed to the wrapped suite's constructor, the config map passed to theConfigMapWrapperSuite'srunmethod will also be passed to therunmethod of the newly created wrapped suite instance.The config map is accessible inside a
Suitein many ways. It is passed torun,runNestedSuites,runTests, andrunTest. It is also passed towithFixture, accessible via a method onNoArgTestandOneArgTest. It is passed to an overloaded forms of thebeforeEachandafterEachmethods of traitBeforeAndAfterEach, as well as overloaded forms of thebeforeAllandafterAllmethods of traitBeforeAndAfterAll. Tests themselves can have information taken from the config map, or the entire config map, through various means. The config map may be passed into the test via aConfigMapFixture, for example. ClassConfigMapWrapperSuiterepresents one more way to get at the config map inside a suite of test:ConfigMapWrapperSuitewill pass the config map to the constructor of your suite class, bringing it easily into scope for tests and helper methods alike.Having the config map passed to the suite constructor might be more convenient in some cases, but in the case of the
org.scalatest.pathtraits, it is necessary if a test needs information from a config map. The reason is that in a path trait, the test code is executed eagerly, beforerunis invoked. The results of the tests are registered when the tests are executed, and those results are merely reported oncerunis invoked. Thus by the timerunhas been invoked, it is too late to get the config map to the tests, which have already been executed. Using aConfigMapWrapperSuitesolves that problem. By passing the config map to the constructor, it is available early enough for the running tests to use it. Here's an example:import org.scalatest._
@WrapWith(classOf[ConfigMapWrapperSuite]) class ExampleSpec(configMap: ConfigMap) extends path.FunSpec {
describe("A widget database") { it("should contain consistent values") { val dbName = configMap("WidgetDbName") // Can access config map // ... } } } - trait DiagrammedExpr[T] extends AnyRef
A trait that represent an expression recorded by
DiagrammedExprMacro, which includes the following members:A trait that represent an expression recorded by
DiagrammedExprMacro, which includes the following members:- a boolean value
- an anchor that records the position of this expression
- anchor values of this expression (including sub-expressions)
DiagrammedExpris used by code generated fromDiagrammedAssertionsMacro, it needs to be public so that the generated code can be compiled. It is expected that ScalaTest users would ever need to useDiagrammedExprdirectly. - trait DistributedSuiteSorter extends AnyRef
A sorter for the events of a run's distributed suites.
A sorter for the events of a run's distributed suites.
This trait is used, for example, when
-PSis passed toRunner, to sort the events of distributed suites such that each suite's events are propagated together, with a timeout if an event takes too long. - trait DistributedTestSorter extends AnyRef
A sorter for the events of a suite's distributed tests.
A sorter for the events of a suite's distributed tests.
This trait is used, for example, by
ParallelTestExecutionto sort the events of tests back into sequential order, with a timeout if an event takes too long. - trait Distributor extends AnyRef
Trait whose instances facilitate parallel execution of
Suites.Trait whose instances facilitate parallel execution of
Suites. An optionalDistributoris passed to therunmethod ofSuite. If aDistributoris indeed passed, traitSuite's implementation ofrunwill populate thatDistributorwith its nestedSuites (by passing them to theDistributor'sapplymethod) rather than executing the nestedSuites directly. It is then up to another thread or process to execute thoseSuites.If you have a set of nested
Suites that must be executed sequentially, you can mix in traitSequentialNestedSuiteExecution, which overridesrunNestedSuitesand callssuper'srunNestedSuitesimplementation, passing inNonefor theDistributor.Implementations of this trait must be thread safe.
- trait DoNotDiscover extends Annotation
Annotation used to indicate that an otherwise discoverable test class should not be discovered.
Annotation used to indicate that an otherwise discoverable test class should not be discovered.
Note: This is actually an annotation defined in Java, not a Scala trait. It must be defined in Java instead of Scala so it will be accessible at runtime. It has been inserted into Scaladoc by pretending it is a trait.
ScalaTest will discover any class that either extends
Suiteand has a public, no-arg constructor, or is annotated with a validWrapWithannotation. If you wish to prevent a class from being discovered, simply annotate it withDoNotDiscover, like this:import org.scalatest._ @DoNotDiscover class SetSpec extends FlatSpec { "An empty Set" should "have size 0" in { assert(Set.empty.size === 0) } it should "produce NoSuchElementException when head is invoked" in { intercept[NoSuchElementException] { Set.empty.head } } }ScalaTest will run classes annotated with
DoNotDiscoverif asked to explicitly, it just won't discover them.Note that because reflection is not supported on Scala.js, this annotation will only work on the JVM, not on Scala.js.
- trait Documenter extends AnyRef
Trait to which markup text tests can be reported.
Trait to which markup text tests can be reported.
Note:
Documenterwill be described in more detail in a future 2.0 milestone release. As of this release you can't see its effects yet. - trait Documenting extends AnyRef
Trait that contains a
markupmethod, which can be used to send markup to theReporter. - final case class DynaTags(suiteTags: Map[String, Set[String]], testTags: Map[String, Map[String, Set[String]]]) extends Product with Serializable
Dynamic tags for a run.
Dynamic tags for a run.
Instances of this class are passed to the
Filterconstructor to support running selected suites and tests via dynamic tagging. For example, dynamic tags can be used to rerun tests that failed previously, or tests selected via a wildcard fromRunneror the Scala interpreter.- suiteTags
a map from String suite ID to a set of tags for that suite.
- testTags
a map from String suite ID to a map, whose keys are test names and values the tags for that test.
- Exceptions thrown
NullPointerExceptionif eithersuiteTagsortestTagsisnull
- trait EitherValues extends AnyRef
Trait that provides an implicit conversion that adds
left.valueandright.valuemethods toEither, which will return the selected value of theEitherif defined, or throwTestFailedExceptionif not.Trait that provides an implicit conversion that adds
left.valueandright.valuemethods toEither, which will return the selected value of theEitherif defined, or throwTestFailedExceptionif not.This construct allows you to express in one statement that an
Eithershould be left or right and that its value should meet some expectation. Here's are some examples:either1.right.value should be > 9 either2.left.value should be ("Muchas problemas")
Or, using assertions instead of matcher expressions:
assert(either1.right.value > 9) assert(either2.left.value === "Muchas problemas")
Were you to simply invoke
right.getorleft.geton theEither, if theEitherwasn't defined as expected (e.g., it was aLeftwhen you expected aRight), it would throw aNoSuchElementException:val either: Either[String, Int] = Left("Muchas problemas")
either.right.get should be > 9 // either.right.get throws NoSuchElementExceptionThe
NoSuchElementExceptionwould cause the test to fail, but without providing a stack depth pointing to the failing line of test code. This stack depth, provided byTestFailedException(and a few other ScalaTest exceptions), makes it quicker for users to navigate to the cause of the failure. WithoutEitherValues, to get a stack depth exception you would need to make two statements, like this:val either: Either[String, Int] = Left("Muchas problemas")
either should be ('right) // throws TestFailedException either.right.get should be > 9The
EitherValuestrait allows you to state that more concisely:val either: Either[String, Int] = Left("Muchas problemas")
either.right.value should be > 9 // either.right.value throws TestFailedException - case class Entry[K, V](key: K, value: V) extends java.util.Map.Entry[K, V] with Product with Serializable
A case class implementation of
java.util.Map.Entryto make it easier to test JavaMaps with ScalaTest Matchers.A case class implementation of
java.util.Map.Entryto make it easier to test JavaMaps with ScalaTest Matchers.In Java,
java.util.Mapis not a subtype ofjava.util.Collection, and does not actually define an element type. You can ask a JavaMapfor an “entry set” via theentrySetmethod, which will return theMap's key/value pairs wrapped in a set ofjava.util.Map.Entry, but aMapis not actually a collection ofEntry. To make JavaMaps easier to work with, however, ScalaTest matchers allows you to treat a JavaMapas a collection ofEntry, and defines this convenience implementation ofjava.util.Map.Entry. Here's how you use it:javaMap should contain (Entry(2, 3)) javaMap should contain oneOf (Entry(2, 3), Entry(3, 4))
- key
the key of this entry
- value
the value of this entry
- sealed abstract class Exceptional extends Outcome
Superclass for the two outcomes of running a test that contain an exception:
FailedandCanceled.Superclass for the two outcomes of running a test that contain an exception:
FailedandCanceled.This class provides a
toOptionmethod that returns aSomewrapping the contained exception, and anisExceptionalfield with the valuetrue. It's companion object provides an extractor that enables patterns that match a test that either failed or canceled, as in:outcome match { case Exceptional(ex) => // handle failed or canceled case case _ => // handle succeeded, pending, or omitted case }
- case class Failed(exception: Throwable) extends Exceptional with Product with Serializable
Outcome for a test that failed, containing an exception describing the cause of the failure.
Outcome for a test that failed, containing an exception describing the cause of the failure.
Note: the difference between this
Failedclass and the similarly namedFailedStatusobject is that an instance of this class indicates one test failed, whereas theFailedStatusobject indicates either one or more tests failed and/or one or more suites aborted during a run. Both are used as the result type ofSuitelifecycle methods, butFailedis a possible result ofwithFixture, whereasFailedStatusis a possible result ofrun,runNestedSuites,runTests, orrunTest. In short,Failedis always just about one test, whereasFailedStatuscould be about something larger: multiple tests or an entire suite. - final class Filter extends Serializable
Filter whose
applymethod determines which of the passed tests to run and ignore based on tags to include and exclude passed as as class parameters.Filter whose
applymethod determines which of the passed tests to run and ignore based on tags to include and exclude passed as as class parameters.This class handles the
org.scalatest.Ignoretag specially, in that itsapplymethod indicates which tests should be ignored based on whether they are tagged withorg.scalatest.Ignore. If"org.scalatest.Ignore"is not passed in thetagsToExcludeset, it will be implicitly added. However, if thetagsToIncludeoption is defined, and the contained set does not include"org.scalatest.Ignore", then only those tests that are both tagged withorg.scalatest.Ignoreand at least one of the tags in thetagsToIncludeset will be included in the result ofapplyand marked as ignored (so long as the test is not also marked with a tag other thanorg.scalatest.Ignorethat is a member of thetagsToExcludeset. For example, ifSlowAsMolassesis a member of thetagsToIncludeset and a test is tagged with bothorg.scalatest.IgnoreandSlowAsMolasses, andSlowAsMolassesappears in thetagsToExcludeset, theSlowAsMolassestag will "overpower" theorg.scalatest.Ignoretag, and the test will be filtered out entirely rather than being ignored.- Exceptions thrown
IllegalArgumentExceptioniftagsToIncludeis defined, but contains an empty setNullArgumentExceptionif eithertagsToIncludeortagsToExcludeare null
- trait Finders extends Annotation
Annotation used to mark a trait or class as defining a testing style that has a
org.scalatest.finders.Finderimplementation, which IDEs and other tools can use to discover tests and scopes.Annotation used to mark a trait or class as defining a testing style that has a
org.scalatest.finders.Finderimplementation, which IDEs and other tools can use to discover tests and scopes.Note: This is actually an annotation defined in Java, not a Scala trait. It must be defined in Java instead of Scala so it will be accessible at runtime. It has been inserted into Scaladoc by pretending it is a trait.
This annotation is used to enable different styles of testing, including both native ScalaTest styles and custom user-created styles, to have rich IDE support. The "Finder API" is released separately from ScalaTest proper, because it is only used by tools such as IDEs.
- trait FixtureAsyncTestSuite extends FixtureSuite with AsyncTestSuite
The base trait of ScalaTest's "fixture" async testing styles, which enable you to pass fixture objects into tests.
The base trait of ScalaTest's "fixture" async testing styles, which enable you to pass fixture objects into tests.
This trait provides a final override of
withFixture(OneArgTest), declared in supertraitFixtureSuite, because thewithFixture(OneArgTest)lifecycle method assumes synchronous testing. Here is its signature:def withFixture(test: OneArgTest): Outcome
The test function interface,
OneArgTest, offers anapplymethod that takes aFixtureParamand returnsOutcome:// In trait OneArgTest: def apply(fixture: FixtureParam): Outcome
Because the result of a test is an
Outcome, when the test function returns, the test body must have determined an outcome already. It will already be one ofSucceeded,Failed,Canceled, or Pending. This is also true whenwithFixture(OneArgTest)returns: because the result type ofwithFixture(OneArgTest)isOutcome, the test body has by definition has already finished execution.This trait overrides and makes abstract the
runTestmethod. Subtraits must must implement this method to callwithFixture(OneArgAsyncTest)instead ofwithFixture(OneArgTest), wherewithFixture(OneArgAsyncTest)is a new method declared in this trait with the following signature and implementation:def withFixture(test: OneArgAsyncTest): FutureOutcome = { test() }
Instead of returning
OutcomelikewithFixture, thewithFixturemethod returns aFutureOutcome. Similarly, theapplymethod of test function interface,OneArgAsyncTest, returnsFutureOutcome:// In trait OneArgAsyncTest: def apply(fixture: FixtureParam): FutureOutcome
The
withFixturemethod supports async testing, because when the test function returns, the test body has not necessarily finished execution.The recommended way to ensure cleanup is performed after a test body finishes execution is to use the
complete-lastlysyntax, defined in supertraitorg.scalatest.CompleteLastly, which will ensure that cleanup will occur whether future-producing code completes abruptly by throwing an exception, or returns normally yielding a future. In the latter case,complete-lastlywill register the cleanup code to execute asynchronously when the future completes.To enable the stacking of traits that define
withFixture(NoArgAsyncTest), it is a good idea to letwithFixture(NoArgAsyncTest)invoke the test function instead of invoking the test function directly. To do so, you'll need to convert theOneArgAsyncTestto aNoArgAsyncTest. You can do that by passing the fixture object to thetoNoArgAsyncTestmethod ofOneArgAsyncTest. In other words, instead of writing “test(theFixture)”, you'd delegate responsibility for invoking the test function to thewithFixture(NoArgAsyncTest)method of the same instance by writing:withFixture(test.toNoArgAsyncTest(theFixture))
Thus, the recommended structure of a
withFixtureimplementation that performs cleanup looks like this:// Your implementation override def withFixture(test: OneArgAsyncTest) = {
// Perform setup here val theFixture = ...
complete { withFixture(test.toNoArgAsyncTest(theFixture)) // Invoke the test function } lastly { // Perform cleanup here } }If you have no cleanup to perform, you can write
withFixturelike this instead:// Your implementation override def withFixture(test: OneArgAsyncTest) = {
// Perform setup here val theFixture = ...
withFixture(test.toNoArgAsyncTest(theFixture)) // Invoke the test function }If you want to perform an action only for certain outcomes, you'll need to register code performing that action as a callback on the
Futureusing one ofFutureregistration methods:onComplete,onSuccess, oronFailure. Note that if a test fails, that will be treated as ascala.util.Success(org.scalatest.Failure). So if you want to perform an action if a test fails, for example, you'd register the callaback usingonSuccess, like this:// Your implementation override def withFixture(test: OneArgAsyncTest) = {
// Perform setup here val theFixture = ...
val futureOutcome = withFixture(test.toNoArgAsyncTest(theFixture)) // Invoke the test function
futureOutcome onFailedThen { _ => // perform action that you want to occur // only if a test fails here } }Lastly, if you want to transform the outcome in some way in
withFixture, you'll need to use either themaportransformmethods ofFuture, like this:// Your implementation override def withFixture(test: OneArgAsyncTest) = {
// Perform setup here val theFixture = ...
val futureOutcome = withFixture(test.toNoArgAsyncTest(theFixture)) // Invoke the test function
futureOutcome change { outcome => // transform the outcome into a new outcome here } }Note that a
NoArgAsyncTest'sapplymethod will only return aFailureif the test completes abruptly with an exception (such asOutOfMemoryError) that should cause the suite to abort rather than the test to fail. Thus usually you would usemapto transform future outcomes, nottransform, so that such suite-aborting exceptions pass through unchanged. The suite will abort asynchronously with any exception returned in aFailure. - trait FixtureContext extends scalatest.compatible.Assertion
Marker trait for fixture-context objects, that enables them to be used in testing styles that require type
AssertionMarker trait for fixture-context objects, that enables them to be used in testing styles that require type
AssertionA fixture-context object is a way to share fixtures between different tests that is most useful when different tests need different combinations of fixture objects. The fixture-context object technique is only appropriate if you don't need to clean up the fixtures after using them.
To use this technique, you define instance variables intialized with fixture objects in traits and/or classes, then in each test instantiate an object that contains just the fixture objects needed by the test. Traits allow you to mix together just the fixture objects needed by each test, whereas classes allow you to pass data in via a constructor to configure the fixture objects. Here's an example
FlatSpecin which fixture objects are partitioned into two traits and each test just mixes together the traits it needs:package org.scalatest.examples.flatspec.fixturecontext
import collection.mutable.ListBuffer import org.scalatest.FlatSpec import org.scalatest.FixtureContext
class ExampleSpec extends FlatSpec {
trait Builder extends FixtureContext { val builder = new StringBuilder("ScalaTest is ") }
trait Buffer extends FixtureContext { val buffer = ListBuffer("ScalaTest", "is") }
// This test needs the StringBuilder fixture "Testing" should "be productive" in new Builder { builder.append("productive!") assert(builder.toString === "ScalaTest is productive!") }
// This test needs the ListBuffer[String] fixture "Test code" should "be readable" in new Buffer { buffer += ("readable!") assert(buffer === List("ScalaTest", "is", "readable!")) }
// This test needs both the StringBuilder and ListBuffer it should "be clear and concise" in new Builder with Buffer { builder.append("clear!") buffer += ("concise!") assert(builder.toString === "ScalaTest is clear!") assert(buffer === List("ScalaTest", "is", "concise!")) } }Extending
FixtureContext, which extends traitorg.scalatest.compatible.Assertionmakes it more convenient to use fixture-context objects in styles, such as async styles, that require test bodies to have typeAssertion. - trait FixtureSuite extends Suite
Base trait for a family of style traits that can pass a fixture object into tests.
- trait FixtureTestSuite extends FixtureSuite with TestSuite
The base trait for ScalaTest's synchronous testing styles that accept a fixture object passed into tests.
The base trait for ScalaTest's synchronous testing styles that accept a fixture object passed into tests. This trait defines a
withFixturelifecycle method that takes as its parameter a test function that accepts a fixture object and returns anOutcome.The abstract
withFixturemethod add by this trait has the following signature:def withFixture(test: OneArgTest): Outcome
The
applymethod of test function interface,OneArgTest, also returnsOutcome:// In trait OneArgTest: def apply(fixture: FixtureParam): Outcome
Because the result of a test is an
Outcome, when the test function returns, the test body must have determined an outcome already. It will already be one ofSucceeded,Failed,Canceled, or Pending. This is also true whenwithFixture(OneArgTest)returns: because the result type ofwithFixture(OneArgTest)isOutcome, the test has by definition already finished execution.The recommended way to ensure cleanup is performed after a test body finishes execution is to use a
try-finallyclause. Usingtry-finallywill ensure that cleanup will occur whether the test function completes abruptly by throwing a suite-aborting exception, or returns normally yielding anOutcome. Note that the only situation in which a test function will complete abruptly with an exception is if the test body throws a suite-aborting exception. Any other exception will be caught and reported as either aFailed,Canceled, orPending.To enable the stacking of traits that define
withFixture(NoArgTest), it is a good idea to letwithFixture(NoArgTest)invoke the test function instead of invoking the test function directly. To do so, you'll need to convert theOneArgTestto aNoArgTest. You can do that by passing the fixture object to thetoNoArgTestmethod ofOneArgTest. In other words, instead of writing “test(theFixture)”, you'd delegate responsibility for invoking the test function to thewithFixture(NoArgTest)method of the same instance by writing:withFixture(test.toNoArgTest(theFixture))
The
withFixturemethod is designed to be stacked, and to enable this, you should always call thesuperimplementation ofwithFixture, and let it invoke the test function rather than invoking the test function directly. In other words, instead of writing “test(...)”, you should write “super.withFixture(test)”. Thus, the recommended structure of awithFixtureimplementation that performs cleanup looks like this:// Your implementation type FixtureParam = String
override def withFixture(test: OneArgTest) = { // Perform setup here val theFixture = "hello" try { withFixture(test.toNoArgTest(theFixture)) // Invoke the test function } finally { // Perform cleanup here } }If you have no cleanup to perform, you can write
withFixturelike this instead:// Your implementation type FixtureParam = String
override def withFixture(test: NoArgTest) = { // Perform setup here val theFixture = "hello" withFixture(test.toNoArgTest(theFixture)) // Invoke the test function }If you want to perform an action only for certain outcomes, you can use a pattern match. For example, if you want to perform an action if a test fails, you'd match on
Failed, like this:// Your implementation type FixtureParam = String
override def withFixture(test: NoArgTest) = {
// Perform setup here val theFixture = "hello"
val outcome = withFixture(test.toNoArgTest(theFixture)) // Invoke the test function
outcome match { case failed: Failed => // perform action that you want to occur // only if a test fails here failed case other => other } }If you want to change the outcome in some way in
withFixture, you can also use a pattern match. For example, if a particular exception intermittently causes a test to fail, and can transform those failures into cancelations, like this:// Your implementation type FixtureParam = String
override def withFixture(test: NoArgTest) = {
val theFixture = "hello"
withFixture(test.toNoArgTest(theFixture)) match { case Failed(ex: ParticularException) => Canceled("Muting flicker", ex) case other => other } } - class FutureOutcome extends AnyRef
Wrapper class for
Future[Outcome]that presents a more convenient API for manipulation inwithFixturemethods in async styles.Wrapper class for
Future[Outcome]that presents a more convenient API for manipulation inwithFixturemethods in async styles.This type serves as the result type of both test functions and
withFixturemethods in ScalaTest's async styles. AFuture[Outcome]is not used as this result type for two reasons. First,Outcometreats exceptions specially, and as a result methods onFuturewould usually not yield the desiredFuture[Outcome]result. Only run-aborting exceptions should result in a failedFuture[Outcome]. Any other thrown exception other thanTestCanceledExceptionorTestPendingExceptionshould result in a successfulFuturecontaining aorg.scalatest.Failed. A thrownTestCanceledExceptionshould result in a successfulFuturecontaining anorg.scalatest.Canceled; A thrownTestPendingExceptionshould result in a successfulFuturecontaining aorg.scalatest.Pending. If manipulating aFuture[Outcome]directly, by contrast, any thrown exception would result in a failedFuture.Additionally, to be consistent with corresponding transformations in traditional testing styles, methods registering callbacks should return a new future outcome that doesn't complete until both the original future outcome has completed and the subsequent callback has completed execution. Additionally, if the callback itself throws an exception, that exception should determine the result of the future outcome returned by the callback registration method. This behavior is rather inconvenient to obtain on the current
FutureAPI, soFutureOutcomeprovides well-named methods that have this behavior.Lastly, the
FutureOutcomeis intended to help prevent confusion by eliminating the need to work with types likescala.util.Success(org.scalatest.Failed). For this purpose aorg.scalactic.Oris used instead of ascala.util.Tryto describe results ofFutureOutcome.A
FutureOutcomerepresents a computation that can result in anOutcomeor an "abort." An abort means that a run-aborting exception occurred during the computation. Any other, non-run-aborting exception will be represented as an non-SucceededOutcome: one ofFailed,Canceled, orPending.The methods of
FutureOutcomeinclude the following callback registration methods:onSucceededThen- registers a callback to be executed if the future outcome isSucceeded.onFailedThen- registers a callback to be executed if the future outcome isFailed.onCanceledThen- registers a callback to be executed if the future outcome isCanceled.onPendingThen- registers a callback to be executed if the future outcome isPending.onOutcomeThen- registers a callback to be executed if the future outcome is actually anOutcomeand not an abort.onAbortedThen- registers a callback to be executed if the future outcome aborts.onCompletedThen- registers a callback to be executed upon completion no matter how the future outcome completes.
The callback methods listed previously can be used to perform a side effect once a
FutureOutcomecompletes. To change anOutcomeinto a differentOutcomeasynchronously, use thechangeregistration method, which takes a function fromOutcometoOutcome. The other methods onFutureOutcome,isCompletedandvalue, allow you to poll aFutureOutcome. None of the methods onFutureOutcomeblock. Lastly, because an implicitFuturisticinstance is provided forFutureOutcome, you can usecomplete-lastlysyntax withFutureOutcome. - trait GivenWhenThen extends AnyRef
Trait that contains methods named
given,when,then, andand, which take a string message and implicitInformer, and forward the message to the informer.Trait that contains methods named
given,when,then, andand, which take a string message and implicitInformer, and forward the message to the informer.Here's an example:
package org.scalatest.examples.flatspec.info
import collection.mutable import org.scalatest._
class SetSpec extends FlatSpec with GivenWhenThen {
"A mutable Set" should "allow an element to be added" in { Given("an empty mutable Set") val set = mutable.Set.empty[String]
When("an element is added") set += "clarity"
Then("the Set should have size 1") assert(set.size === 1)
And("the Set should contain the added element") assert(set.contains("clarity"))
info("That's all folks!") } }If you run this
SetSpecfrom the interpreter, you will see the following output:scala> org.scalatest.run(new SetSpec) A mutable Set - should allow an element to be added + Given an empty mutable Set + When an element is added + Then the Set should have size 1 + And the Set should contain the added element + That's all folks! - trait Ignore extends Annotation
Annotation used to tag a test, or suite of tests, as ignored.
Annotation used to tag a test, or suite of tests, as ignored.
Note: This is actually an annotation defined in Java, not a Scala trait. It must be defined in Java instead of Scala so it will be accessible at runtime. It has been inserted into Scaladoc by pretending it is a trait.
If you wish to temporarily ignore an entire suite of tests, you can annotate the test class with
@Ignore, like this:package org.scalatest.examples.flatspec.ignoreall import org.scalatest._ @Ignore class SetSpec extends FlatSpec { "An empty Set" should "have size 0" in { assert(Set.empty.size === 0) } it should "produce NoSuchElementException when head is invoked" in { intercept[NoSuchElementException] { Set.empty.head } } }When you mark a test class with a tag annotation, ScalaTest will mark each test defined in that class with that tag. Thus, marking the
SetSpecin the above example with the@Ignoretag annotation means that both tests in the class will be ignored. If you run the aboveSetSpecin the Scala interpreter, you'll see:scala> org.scalatest.run(new SetSpec) An empty Set - should have size 0 !!! IGNORED !!! - should produce NoSuchElementException when head is invoked !!! IGNORED !!!
Note that marking a test class as ignored won't prevent it from being discovered by ScalaTest. Ignored classes will be discovered and run, and all their tests will be reported as ignored. This is intended to keep the ignored class somewhat visible, to encourage the developers to eventually fix and un-ignore it. If you want to prevent a class from being discovered at all, use the
DoNotDiscoverannotation instead.Another use case for
@Ignoreis to mark test methods as ignored in traitsSpecandfixture.Spec. Here's an example:package org.scalatest.examples.spec.ignore import org.scalatest._ class SetSpec extends RefSpec { @Ignore def `an empty Set should have size 0` { assert(Set.empty.size === 0) } def `invoking head on an empty Set should produce NoSuchElementException` { intercept[NoSuchElementException] { Set.empty.head } } }If you run this version of
SetSpecin the Scala interpreter, you'll see that it runs only the second test and reports that the first test was ignored:scala> org.scalatest.run(new SetSpec) SetSpec: - an empty Set should have size 0 !!! IGNORED !!! - invoking head on an empty Set should produce NoSuchElementExceptionNote that because reflection is not supported on Scala.js, this annotation will only work on the JVM, not on Scala.js. - trait Informer extends AnyRef
Trait to which custom information about a running suite of tests can be reported.
Trait to which custom information about a running suite of tests can be reported.
An
Informeris essentially used to wrap aReporterand provide easy ways to send custom information to thatReportervia anInfoProvidedevent.Informercontains anapplymethod that takes a string and an optional payload object of typeAny. TheInformerwill forward the passedmessagestring to theReporteras themessageparameter, and the optional payload object as thepayloadparameter, of anInfoProvidedevent.Here's an example in which the
Informeris used both directly viainfomethod of traitFlatSpecand indirectly via the methods of traitGivenWhenThen:package org.scalatest.examples.flatspec.info
import collection.mutable import org.scalatest._
class SetSpec extends FlatSpec with GivenWhenThen {
"A mutable Set" should "allow an element to be added" in { given("an empty mutable Set") val set = mutable.Set.empty[String]
when("an element is added") set += "clarity"
then("the Set should have size 1") assert(set.size === 1)
and("the Set should contain the added element") assert(set.contains("clarity"))
info("That's all folks!") } }If you run this
SetSpecfrom the interpreter, you will see the following output:scala> org.scalatest.run(new SetSpec) A mutable Set - should allow an element to be added + Given an empty mutable Set + When an element is added + Then the Set should have size 1 + And the Set should contain the added element + That's all folks! - trait Informing extends AnyRef
Trait that contains the
infomethod, which can be used to send info to the reporter. - trait Inside extends AnyRef
Trait containing the
insideconstruct, which allows you to make statements about nested object graphs using pattern matching.Trait containing the
insideconstruct, which allows you to make statements about nested object graphs using pattern matching.For example, given the following case classes:
case class Address(street: String, city: String, state: String, zip: String) case class Name(first: String, middle: String, last: String) case class Record(name: Name, address: Address, age: Int)
You could write:
inside (rec) { case Record(name, address, age) => inside (name) { case Name(first, middle, last) => first should be ("Sally") middle should be ("Ann") last should be ("Jones") } inside (address) { case Address(street, city, state, zip) => street should startWith ("25") city should endWith ("Angeles") state should equal ("CA") zip should be ("12345") } age should be < 99 }If an assertion fails, the error message will include the
toStringof each value passed toinsideclauses enclosing the failed assertion. For example, ifrecin the previous expression was defined like this:val rec = Record( Name("Sally", "Anna", "Jones"), Address("25 Main St", "Los Angeles", "CA", "12345"), 38 )
The error message will read:
"Ann[a]" was not equal to "Ann[]", inside Name(Sally,Anna,Jones), inside Record(Name(Sally,Anna,Jones),Address(25 Main St,Los Angeles,CA,12345),38)
- trait Inspectors extends AnyRef
Provides nestable inspector methods (or just inspectors) that enable assertions to be made about collections.
Provides nestable inspector methods (or just inspectors) that enable assertions to be made about collections.
For example, the
forAllmethod enables you to state that something should be true about all elements of a collection, such as that all elements should be positive:scala> import org.scalatest._ import org.scalatest._ scala> import Assertions._ import Assertions._ scala> import Inspectors._ import Inspectors._ scala> val xs = List(1, 2, 3, 4, 5) xs: List[Int] = List(1, 2, 3, 4, 5) scala> forAll (xs) { x => assert(x > 0) }Or, with matchers:
scala> import Matchers._ import Matchers._ scala> forAll (xs) { x => x should be > 0 }To make assertions about nested collections, you can nest the inspector method invocations. For example, given the following list of lists of
Int:scala> val yss = | List( | List(1, 2, 3), | List(1, 2, 3), | List(1, 2, 3) | ) yss: List[List[Int]] = List(List(1, 2, 3), List(1, 2, 3), List(1, 2, 3))You can assert that all
Intelements in all nested lists are positive by nesting twoforAllmethod invocations, like this:scala> forAll (yss) { ys => | forAll (ys) { y => y should be > 0 } | }The full list of inspector methods are:
forAll- succeeds if the assertion holds true for every elementforAtLeast- succeeds if the assertion holds true for at least the specified number of elementsforAtMost- succeeds if the assertion holds true for at most the specified number of elementsforBetween- succeeds if the assertion holds true for between the specified minimum and maximum number of elements, inclusiveforEvery- same asforAll, but lists all failing elements if it fails (whereasforAlljust reports the first failing element)forExactly- succeeds if the assertion holds true for exactly the specified number of elements
The error messages produced by inspector methods are designed to make sense no matter how deeply you nest the method invocations. Here's an example of a nested inspection that fails and the resulting error message:
scala> forAll (yss) { ys => | forAll (ys) { y => y should be < 2 } | } org.scalatest.exceptions.TestFailedException: forAll failed, because: at index 0, forAll failed, because: at index 1, 2 was not less than 2 (<console>:20) in List(1, 2, 3) (<console>:20) in List(List(1, 2, 3), List(1, 2, 3), List(1, 2, 3)) at org.scalatest.InspectorsHelper$.forAll(Inspectors.scala:146) ...One way the error message is designed to help you understand the error is by using indentation that mimics the indentation of the source code (optimistically assuming the source will be nicely indented). The error message above indicates the outer
forAllfailed because its initialList(i.e., at index 0) failed the assertion, which was that all elements of that initialList[Int]at index 0 should be less than 2. This assertion failed because index 1 of that inner list contained the value 2, which was indeed “not less than 2.” The error message for the inner list is an indented line inside the error message for the outer list. The actual contents of each list are displayed at the end in inspector error messages, also indented appropriately. The actual contents are placed at the end so that for very large collections, the contents will not drown out and make it difficult to find the messages that describe actual causes of the failure.The
forAllandforEverymethods are similar in that both succeed only if the assertion holds for all elements of the collection. They differ in thatforAllwill only report the first element encountered that failed the assertion, butforEverywill report all elements that fail the assertion. The tradeoff is that whileforEverygives more information, it may take longer to run because it must inspect every element of the collection. TheforAllmethod can simply stop inspecting once it encounters the first failing element. Here's an example that shows the difference in theforAllandforEveryerror messages:scala> forAll (xs) { x => x should be < 3 } org.scalatest.exceptions.TestFailedException: forAll failed, because: at index 2, 3 was not less than 3 (<console>:18) in List(1, 2, 3, 4, 5) at org.scalatest.InspectorsHelper$.forAll(Inspectors.scala:146) ... scala> forEvery (xs) { x => x should be < 3 } org.scalatest.exceptions.TestFailedException: forEvery failed, because: at index 2, 3 was not less than 3 (<console>:18), at index 3, 4 was not less than 3 (<console>:18), at index 4, 5 was not less than 3 (<console>:18) in List(1, 2, 3, 4, 5) at org.scalatest.InspectorsHelper$.forEvery(Inspectors.scala:226) ...Note that if you're using matchers, you can alternatively use inspector shorthands for writing non-nested inspections. Here's an example:
scala> all (xs) should be > 3 org.scalatest.exceptions.TestFailedException: 'all' inspection failed, because: at index 0, 1 was not greater than 3 in List(1, 2, 3, 4, 5) at org.scalatest.InspectorsHelper$.forAll(Inspectors.scala:146)You can use
Inspectorson anyscala.collection.GenTraversable,java.util.Collection,java.util.Map(withEntry),Array, orString. Here are some examples:scala> import org.scalatest._ import org.scalatest._ scala> import Inspectors._ import Inspectors._ scala> import Matchers._ import Matchers._ scala> forAll (Array(1, 2, 3)) { e => e should be < 5 } scala> import collection.JavaConverters._ import collection.JavaConverters._ scala> val js = List(1, 2, 3).asJava js: java.util.List[Int] = [1, 2, 3] scala> forAll (js) { j => j should be < 5 } scala> val jmap = Map("a" -> 1, "b" -> 2).asJava jmap: java.util.Map[String,Int] = {a=1, b=2} scala> forAtLeast(1, jmap) { e => e shouldBe Entry("b", 2) } scala> forAtLeast(2, "hello, world!") { c => c shouldBe 'o' } - trait LoneElement extends AnyRef
Trait that provides an implicit conversion that adds to collection types a
loneElementmethod, which will return the value of the lone element if the collection does indeed contain one and only one element, or throwTestFailedExceptionif not.Trait that provides an implicit conversion that adds to collection types a
loneElementmethod, which will return the value of the lone element if the collection does indeed contain one and only one element, or throwTestFailedExceptionif not.This construct allows you to express in one statement that a collection should contain one and only one element and that the element value should meet some expectation. Here's an example:
set.loneElement should be > 9Or, using an assertion instead of a matcher expression:
assert(set.loneElement > 9)The
loneElementsyntax can be used with any collection typeCfor which an implicitCollecting[C]is available. ScalaTest provides implicitCollectinginstances forscala.collection.GenTraversable,Array, andjava.util.Collection. You can enable theloneElementsyntax on other collection types by defining an implicitCollectinginstances for those types.If you want to use
loneElementwith ajava.util.Map, first transform it to a set of entries withentrySet, and if helpful, use ScalaTest'sEntryclass:scala> import org.scalatest._ import org.scalatest._ scala> import LoneElement._ import LoneElement._ scala> import Matchers._ import Matchers._ scala> val jmap = new java.util.HashMap[String, Int] jmap: java.util.HashMap[String,Int] = {} scala> jmap.put("one", 1) res0: Int = 0 scala> jmap.entrySet.loneElement should be (Entry("one", 1)) - trait NonImplicitAssertions extends Assertions
Trait that can be mixed into a
Suiteto disable the implicit conversions provided by default in traitAssertions, which traitSuiteextends.Trait that can be mixed into a
Suiteto disable the implicit conversions provided by default in traitAssertions, which traitSuiteextends.This trait can be used to quickly solve a problem in which ScalaTest's default implicit conversion is clashing with those of some other library you need to use in your tests. After mixing in this trait, like this:
class MySuite extends FunSuite with NonImplicitAssertions { // ... }
You can write tests using
assert(without triple equals),assertResult,assertThrows,intercept,assertCompiles,assertDoesNotCompile, andassertTypeError:assert(a < 7)
assertResult(2) { 1 + 1 }
assertThrows[IndexOutOfBoundsException] { "hi".charAt(-1) }
val caught = intercept[IndexOutOfBoundsException] { "hi".charAt(-1) }
assertDoesNotCompile("val a: String = 1")
assertTypeError("val a: String = 1")
assertCompiles("val a: Int = 1") - trait Notifier extends AnyRef
Trait providing an
applymethod to which status updates about a running suite of tests can be reported.Trait providing an
applymethod to which status updates about a running suite of tests can be reported.An
Notifieris essentially used to wrap aReporterand provide easy ways to send status updates to thatReportervia anNoteProvidedevent.Notifiercontains anapplymethod that takes a string and an optional payload object of typeAny. TheNotifierwill forward the passed alertmessagestring to theReporteras themessageparameter, and the optional payload object as thepayloadparameter, of anNoteProvidedevent.For insight into the differences between
Notifier,Alerter, andInformer, see the main documentation for traitNotifying. - trait Notifying extends AnyRef
Trait that contains the
notemethod, which can be used to send a status notification to the reporter.Trait that contains the
notemethod, which can be used to send a status notification to the reporter.The difference between
noteand theinfomethod ofInformeris thatinfomessages provided during a test are recorded and sent as part of test completion event, whereasnotemessages are sent right away asNoteProvidedmessages. For long-running tests,noteallows you to send "status notifications" to the reporter right away, so users can track the progress of the long-running tests. By contrast,infomessages will only be seen by the user after the test has completed, and are more geared towards specification (such as Given/When/Then messages) than notification.The difference between
noteand thealertmethod ofAlertingis thatalertis intended to be used for warnings or notifications of potential problems, whereasnoteis just for status notifications. In string reporters for which ANSI color is enabled,notenotifications are shown in green andalertnotifications in yellow. - trait OneInstancePerTest extends SuiteMixin
Trait that facilitates a style of testing in which each test is run in its own instance of the suite class to isolate each test from the side effects of the other tests in the suite.
Trait that facilitates a style of testing in which each test is run in its own instance of the suite class to isolate each test from the side effects of the other tests in the suite.
Recommended Usage: Trait OneInstancePerTestis intended primarily to serve as a supertrait forParallelTestExecutionand the path traits, to facilitate porting JUnit tests to ScalaTest, and to make it easy for users who prefer JUnit's approach to isolation to obtain similar behavior in ScalaTest.If you mix this trait into a
Suite, you can initialize shared reassignable fixture variables as well as shared mutable fixture objects in the constructor of the class. Because each test will run in its own instance of the class, each test will get a fresh copy of the instance variables. This is the approach to test isolation taken, for example, by the JUnit framework.OneInstancePerTestcan, therefore, be handy when porting JUnit tests to ScalaTest.Here's an example of
OneInstancePerTestbeing used in aFunSuite:import org.scalatest.FunSuite import org.scalatest.OneInstancePerTest import collection.mutable.ListBuffer
class MySuite extends FunSuite with OneInstancePerTest {
val builder = new StringBuilder("ScalaTest is ") val buffer = new ListBuffer[String]
test("easy") { builder.append("easy!") assert(builder.toString === "ScalaTest is easy!") assert(buffer.isEmpty) buffer += "sweet" }
test("fun") { builder.append("fun!") assert(builder.toString === "ScalaTest is fun!") assert(buffer.isEmpty) } }OneInstancePerTestis supertrait toParallelTestExecution, in which running each test in its own instance is intended to make it easier to write suites of tests that run in parallel (by reducing the likelihood of concurrency bugs in those suites.)OneInstancePerTestis also supertrait to the path traits,path.FunSpecandpath.FreeSpec, to make it obvious these traits run each test in a new, isolated instance.For the details on how
OneInstancePerTestworks, see the documentation for methodsrunTestsandrunTest, which this trait overrides. - trait OptionValues extends AnyRef
Trait that provides an implicit conversion that adds a
valuemethod toOption, which will return the value of the option if it is defined, or throwTestFailedExceptionif not.Trait that provides an implicit conversion that adds a
valuemethod toOption, which will return the value of the option if it is defined, or throwTestFailedExceptionif not.This construct allows you to express in one statement that an option should be defined and that its value should meet some expectation. Here's an example:
opt.value should be > 9Or, using an assertion instead of a matcher expression:
assert(opt.value > 9)Were you to simply invoke
geton theOption, if the option wasn't defined, it would throw aNoSuchElementException:val opt: Option[Int] = None
opt.get should be > 9 // opt.get throws NoSuchElementExceptionThe
NoSuchElementExceptionwould cause the test to fail, but without providing a stack depth pointing to the failing line of test code. This stack depth, provided byTestFailedException(and a few other ScalaTest exceptions), makes it quicker for users to navigate to the cause of the failure. WithoutOptionValues, to get a stack depth exception you would need to make two statements, like this:val opt: Option[Int] = None
opt should be ('defined) // throws TestFailedException opt.get should be > 9The
OptionValuestrait allows you to state that more concisely:val opt: Option[Int] = None
opt.value should be > 9 // opt.value throws TestFailedException - sealed abstract class Outcome extends Product with Serializable
Superclass for the possible outcomes of running a test.
Superclass for the possible outcomes of running a test.
Outcomeis the result type of thewithFixturemethods of traitsSuiteandFixtureSuite, as well as theirNoArgTestandOneArgTestfunction types. The four possible outcomes are:Succeeded- indicates a test succeededFailed- indicates a test failed and contains an exception describing the failureCanceled- indicates a test was canceled and contains an exception describing the cancelationPending- indicates a test was pending
Note that "ignored" does not appear as a type of
Outcome, because tests are marked as ignored on the outside and skipped over as the suite executes. So an ignored test never runs, and therefore never has an outcome. By contrast, a test is determined to be pending by running the test and observing the actual outcome. If the test body completes abruptly with aTestPendingException, then the outcome was that the test was pending. - trait OutcomeOf extends AnyRef
Trait that contains the
outcomeOfmethod, which executes a passed code block and transforms the outcome into anOutcome, using the same mechanism used by ScalaTest to produce anOutcomewhen executing a test. - trait ParallelTestExecution extends OneInstancePerTest
Trait that causes that the tests of any suite it is mixed into to be run in parallel if a
Distributoris passed torunTests.Trait that causes that the tests of any suite it is mixed into to be run in parallel if a
Distributoris passed torunTests.ScalaTest's normal approach for running suites of tests in parallel is to run different suites in parallel, but the tests of any one suite sequentially. This approach should provide sufficient distribution of the work load in most cases, but some suites may encapsulate multiple long-running tests. Such suites may dominate the execution time of the run. If so, mixing in this trait into just those suites will allow their long-running tests to run in parallel with each other, thereby helping to reduce the total time required to run an entire run.
To make it easier for users to write tests that run in parallel, this trait runs each test in its own instance of the class. Running each test in its own instance enables tests to use the same instance
varsand mutable objects referenced from instance variables without needing to synchronize. Although ScalaTest provides functional approaches to factoring out common test code that can help avoid such issues, running each test in its own instance is an insurance policy that makes running tests in parallel easier and less error prone.For the details on how
ParallelTestExecutionworks, see the documentation for methodsrun,runTests, andrunTest, which this trait overrides.Note: This trait's implementation of
runTestisfinal, to ensure that behavior related to individual tests are executed by the same thread that executes the actual test. This means, for example, that you won't be allowed to write...with ParallelTestExecution with BeforeAndAfter. Instead, you'd need to putParallelTestExecutionlast, as in:with BeforeAndAfter with ParallelTestExecution. For more details, see the documentation for therunTestmethod. - trait PartialFunctionValues extends AnyRef
Trait that provides an implicit conversion that adds a
valueAtmethod toPartialFunction, which will return the value (result) of the function applied to the argument passed tovalueAt, or throwTestFailedExceptionif the partial function is not defined at the argument.Trait that provides an implicit conversion that adds a
valueAtmethod toPartialFunction, which will return the value (result) of the function applied to the argument passed tovalueAt, or throwTestFailedExceptionif the partial function is not defined at the argument.This construct allows you to express in one statement that a partial function should be defined for a particular input, and that its result value should meet some expectation. Here's an example:
pf.valueAt("IV") should equal (4)
Or, using an assertion instead of a matcher expression:
assert(pf.valueAt("IV") === 4)
Were you to simply invoke
applyon thePartialFunction, passing in an input value, if the partial function wasn't defined at that input, it would throw some exception, but likely not one that provides a stack depth:// Note: a Map[K, V] is a PartialFunction[K, V] val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4)
pf("V") should equal (5) // pf("V") throws NoSuchElementExceptionThe
NoSuchElementExceptionthrown in this situation would cause the test to fail, but without providing a stack depth pointing to the failing line of test code. This stack depth, provided byTestFailedException(and a few other ScalaTest exceptions), makes it quicker for users to navigate to the cause of the failure. WithoutPartialFunctionValues, to get a stack depth exception you would need to make two statements, like this:val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4)
pf.isDefinedAt("V") should be (true) // throws TestFailedException pf("V") should equal (5)The
PartialFunctionValuestrait allows you to state that more concisely:val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4)
pf.valueAt("V") should equal (5) // pf.valueAt("V") throws TestFailedException - trait Payloads extends AnyRef
Trait facilitating the inclusion of a payload in a thrown ScalaTest exception.
Trait facilitating the inclusion of a payload in a thrown ScalaTest exception.
This trait includes a
withPayloadconstruct that enables a payload object (or modified payload object) to be included as the payload of a thrown exception.Many ScalaTest events include an optional "payload" field that can be used to pass information to a custom reporter. This trait facilitates such customization, by making it easy to insert a payload into a thrown exception, such as a
TestFailedException. The thrown exception must mix inPayload. ScalaTest looks for traitPayloadand fires any payloads it finds in the relevant ScalaTest event stimulated by the exception, such as aTestFailedevent stimulated by aTestFailedException. Here's an example in which a GUI snapshot is included as a payload when a test fails:withPayload(generateGUISnapshot()) { 1 + 1 should === (3) } - sealed trait PendingStatement extends AnyRef
Trait mixed into the result type of the
pendingstatement of traitAssertions, which always throwsTestPendingException.Trait mixed into the result type of the
pendingstatement of traitAssertions, which always throwsTestPendingException.This type is used primarily to facilitate the
is (pending)syntax of traitsFlatSpec,WordSpec, andFLatSpecas well theis (pending)or(pending)syntax of sibling traits in theorg.scalatest.fixturepackage. Because thependingmethod inAssertionsalways completes abruptly with an exception, its type would be inferred to beNothing, which is a relatively common type. To make sure syntax likeis (pending)only works with methodpending, it is helpful to have a specially named "Nothing" type. - trait PrivateMethodTester extends AnyRef
Trait that facilitates the testing of private methods.
Trait that facilitates the testing of private methods.
To test a private method, mix in trait
PrivateMethodTesterand create aPrivateMethodobject, like this:val decorateToStringValue = PrivateMethod[String]('decorateToStringValue)
The type parameter on
PrivateMethod, in this caseString, is the result type of the private method you wish to invoke. The symbol passed to thePrivateMethod.applyfactory method, in this case'decorateToStringValue, is the name of the private method to invoke. To test the private method, use theinvokePrivateoperator, like this:targetObject invokePrivate decorateToStringValue(1)Here,
targetObjectis a variable or singleton object name referring to the object whose private method you want to test. You pass the arguments to the private method in the parentheses after thePrivateMethodobject. The result type of aninvokePrivateoperation will be the type parameter of thePrivateMethodobject, thus you need not cast the result to use it. In other words, after creating aPrivateMethodobject, the syntax to invoke the private method looks like a regular method invocation, but with the dot (.) replaced byinvokePrivate. The private method is invoked dynamically via reflection, so if you have a typo in the method name symbol, specify the wrong result type, or pass invalid parameters, theinvokePrivateoperation will compile, but throw an exception at runtime.One limitation to be aware of is that you can't use
PrivateMethodTesterto test a private method declared in a trait, because the class the trait gets mixed into will not declare that private method. Only the class generated to hold method implementations for the trait will have that private method. If you want to test a private method declared in a trait, and that method does not use any state of that trait, you can move the private method to a companion object for the trait and test it usingPrivateMethodTesterthat way. If the private trait method you want to test uses the trait's state, your best options are to test it indirectly via a non-private trait method that calls the private method, or make the private method package access and test it directly via regular static method invocations.Also, if you want to use
PrivateMethodTesterto invoke a parameterless private method, you'll need to use empty parens. Instead of:targetObject invokePrivate privateParameterlessMethod
You'll need to write:
targetObject invokePrivate privateParameterlessMethod()
- trait RandomTestOrder extends OneInstancePerTest
Trait that causes tests to be run in pseudo-random order.
Trait that causes tests to be run in pseudo-random order.
Although the tests are run in pseudo-random order, events will be fired in the “normal” order for the
Suitethat mixes in this trait, as determined byrunTests.The purpose of this trait is to reduce the likelihood of unintentional order dependencies between tests in the same test class.
- trait RecoverMethods extends AnyRef
Offers two methods for transforming futures when exceptions are expected.
Offers two methods for transforming futures when exceptions are expected.
This trait offers two methods for testing for expected exceptions in the context of futures:
recoverToSucceededIfandrecoverToExceptionIf. Because this trait is mixed into traitAsyncTestSuite, both of its methods are available by default in any async-style suite.If you just want to ensure that a future fails with a particular exception type, and do not need to inspect the exception further, use
recoverToSucceededIf:recoverToSucceededIf[IllegalStateException] { // Result type: Future[Assertion] emptyStackActor ? Peek }
The
recoverToSucceededIfmethod performs a job similar toassertThrows, except in the context of a future. It transforms aFutureof any type into aFuture[Assertion]that succeeds only if the original future fails with the specified exception. Here's an example in the REPL:scala> import org.scalatest.RecoverMethods._ import org.scalatest.RecoverMethods._ scala> import scala.concurrent.Future import scala.concurrent.Future scala> import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global scala> recoverToSucceededIf[IllegalStateException] { | Future { throw new IllegalStateException } | } res0: scala.concurrent.Future[org.scalatest.Assertion] = ... scala> res0.value res1: Option[scala.util.Try[org.scalatest.Assertion]] = Some(Success(Succeeded))Otherwise it fails with an error message similar to those given by
assertThrows:scala> recoverToSucceededIf[IllegalStateException] { | Future { throw new RuntimeException } | } res2: scala.concurrent.Future[org.scalatest.Assertion] = ... scala> res2.value res3: Option[scala.util.Try[org.scalatest.Assertion]] = Some(Failure(org.scalatest.exceptions.TestFailedException: Expected exception java.lang.IllegalStateException to be thrown, but java.lang.RuntimeException was thrown)) scala> recoverToSucceededIf[IllegalStateException] { | Future { 42 } | } res4: scala.concurrent.Future[org.scalatest.Assertion] = ... scala> res4.value res5: Option[scala.util.Try[org.scalatest.Assertion]] = Some(Failure(org.scalatest.exceptions.TestFailedException: Expected exception java.lang.IllegalStateException to be thrown, but no exception was thrown))The
recoverToExceptionIfmethod differs from therecoverToSucceededIfin its behavior when the assertion succeeds:recoverToSucceededIfyields aFuture[Assertion], whereasrecoverToExceptionIfyields aFuture[T], whereTis the expected exception type.recoverToExceptionIf[IllegalStateException] { // Result type: Future[IllegalStateException] emptyStackActor ? Peek }
In other words,
recoverToExpectionIfis tointerceptasrecovertToSucceededIfis toassertThrows. The first one allows you to perform further assertions on the expected exception. The second one gives you a result type that will satisfy the type checker at the end of the test body. Here's an example showingrecoverToExceptionIfin the REPL:scala> val futureEx = | recoverToExceptionIf[IllegalStateException] { | Future { throw new IllegalStateException("hello") } | } futureEx: scala.concurrent.Future[IllegalStateException] = ... scala> futureEx.value res6: Option[scala.util.Try[IllegalStateException]] = Some(Success(java.lang.IllegalStateException: hello)) scala> futureEx map { ex => assert(ex.getMessage == "world") } res7: scala.concurrent.Future[org.scalatest.Assertion] = ... scala> res7.value res8: Option[scala.util.Try[org.scalatest.Assertion]] = Some(Failure(org.scalatest.exceptions.TestFailedException: "[hello]" did not equal "[world]")) - trait Reporter extends AnyRef
Trait whose instances collect the results of a running suite of tests and presents those results in some way to the user.
Trait whose instances collect the results of a running suite of tests and presents those results in some way to the user. Instances of this trait can be called "report functions" or "reporters."
Reporters receive test results via fifteen events. Each event is fired to pass a particular kind of information to the reporter. The events are:
DiscoveryStartingDiscoveryCompletedRunStartingRunStoppedRunAbortedRunCompletedScopeOpenedScopeClosedScopePendingTestStartingTestSucceededTestFailedTestCanceledTestIgnoredTestPendingSuiteStartingSuiteCompletedSuiteAbortedInfoProvidedMarkupProvidedAlertProvidedNoteProvided
Reporters may be implemented such that they only present some of the reported events to the user. For example, you could define a reporter class that does nothing in response to
SuiteStartingevents. Such a class would always ignoreSuiteStartingevents.The term test as used in the
TestStarting,TestSucceeded, andTestFailedevent names is defined abstractly to enable a wide range of test implementations. ScalaTest's style traits (subclasse of traitSuite) fireTestStartingto indicate they are about to invoke one of their tests,TestSucceededto indicate a test returned normally, andTestFailedto indicate a test completed abruptly with an exception. Although the execution of aSuitesubclass's tests will likely be a common event reported via theTestStarting,TestSucceeded, andTestFailedevents, because of the abstract definition of “test” used by the the event classes, these events are not limited to this use. Information about any conceptual test may be reported via theTestStarting,TestSucceeded, andTestFailedevents.Likewise, the term suite as used in the
SuiteStarting,SuiteAborted, andSuiteCompletedevent names is defined abstractly to enable a wide range of suite implementations. ObjectRunnerfiresSuiteStartingto indicate it is about to invokerunon aSuite,SuiteCompletedto indicate aSuite'srunmethod returned normally, andSuiteAbortedto indicate aSuite'srunmethod completed abruptly with an exception. Similarly, classSuitefiresSuiteStartingto indicate it is about to invokerunon a nestedSuite,SuiteCompletedto indicate a nestedSuite'srunmethod returned normally, andSuiteAbortedto indicate a nestedSuite'srunmethod completed abruptly with an exception. Although the execution of aSuite'srunmethod will likely be a common event reported via theSuiteStarting,SuiteAborted, andSuiteCompletedevents, because of the abstract definition of "suite" used by the event classes, these events are not limited to this use. Information about any conceptual suite may be reported via theSuiteStarting,SuiteAborted, andSuiteCompletedevents.Extensibility
You can create classes that extend
Reporterto report test results in custom ways, and to report custom information passed as an event "payload."Reporterclasses can handle events in any manner, including doing nothing. - trait ResourcefulReporter extends Reporter
Subtrait of
Reporterthat contains adisposemethod for releasing any finite, non-memory resources, such as file handles, held by theReporter.Subtrait of
Reporterthat contains adisposemethod for releasing any finite, non-memory resources, such as file handles, held by theReporter.Runnerwill invokedisposeon anyResourcefulReporterwhen it no longer needs theReporter. - trait Retries extends AnyRef
Provides methods that can be used in
withFixtureimplementations to retry tests in various scenarios.Provides methods that can be used in
withFixtureimplementations to retry tests in various scenarios.Trait
Retriesis intended to help you deal with “flickers”—tests that usually pass, but occasionally fail. The best way to deal with such tests is to fix them so they always pass. Sometimes, however, this is not practical. In such cases, flickers can waste your time by forcing you to investigate test failures that turn out to be flickers. Or worse, like the boy who cried wolf, the flickers may train you an your colleagues to not pay attention to failures such that you don't notice real problems, at least not in a timely manner.Trait
Retriesoffers methods that will retry a failed and/or canceled test once, on the same thread, with or without a delay. These methods take a block that results inOutcome, and are intended to be used inwithFixturemethods. You should be very selective about which tests you retry, retrying those for which you have good evidence to conclude they are flickers. Thus it is recommended you only retry tests that are tagged withRetryable, and only tag tests as such once they have flickered consistently for a while, and only after you invested a reasonable effort into fixing them properly.Here's an example showing how you might use
Retries:package org.scalatest.examples.tagobjects.retryable
import org.scalatest._ import tagobjects.Retryable
class SetSpec extends FlatSpec with Retries {
override def withFixture(test: NoArgTest) = { if (isRetryable(test)) withRetry { super.withFixture(test) } else super.withFixture(test) }
"An empty Set" should "have size 0" taggedAs(Retryable) in { assert(Set.empty.size === 0) } } - class Sequential extends Suite with SequentialNestedSuiteExecution
A
Suiteclass mixing inSequentialNestedSuiteExecutionthat takes zero to manySuites, which will be returned from itsnestedSuitesmethod.A
Suiteclass mixing inSequentialNestedSuiteExecutionthat takes zero to manySuites, which will be returned from itsnestedSuitesmethod.For example, you can define a suite that always executes a list of nested suites like this:
class StepsSuite extends Sequential( new Step1Suite, new Step2Suite, new Step3Suite, new Step4Suite, new Step5Suite )
When
StepsSuiteis executed, it will execute its nested suites in the passed order:Step1Suite,Step2Suite,Step3Suite,Step4Suite, andStep5Suite. BecauseSequentialextendsSequentialNestedSuiteExecution, the distributor passed torunNestedSuiteswill always beNone. So not only will the suites passed to the constructor be executed sequentially, any tests and nested suites of the passed suites will also be executed sequentually.The difference between
SequentialandStepwiseis that althoughStepwiseexecutes its own nested suites sequentially, it passes whatever distributor was passed to it to those nested suites. Thus the nested suites could run their own nested suites and tests in parallel if that distributor is defined. By contrast,Sequentialalways passesNonefor the distributor to the nested suites, so any and every test and nested suite contained within the nested suites passed to theSequentialconstrutor will be executed sequentially.- Exceptions thrown
NullArgumentExceptionifsuitesToNest, or any suite it contains, isnull.
- trait SequentialNestedSuiteExecution extends SuiteMixin
Trait that causes the nested suites of any suite it is mixed into to be run sequentially even if a
Distributoris passed torunNestedSuites.Trait that causes the nested suites of any suite it is mixed into to be run sequentially even if a
Distributoris passed torunNestedSuites. This trait overrides therunNestedSuitesmethod and fowards every parameter passed to it to a superclass invocation ofrunNestedSuites, except it always passesNonefor theDistributor. Mix in this trait into any suite whose nested suites need to be run sequentially even with the rest of the run is being executed concurrently. - trait SeveredStackTraces extends TestSuiteMixin
Trait that causes
StackDepthexceptions thrown by a running test (such asTestFailedExceptions) to have the exception's stack trace severed at the stack depth.Trait that causes
StackDepthexceptions thrown by a running test (such asTestFailedExceptions) to have the exception's stack trace severed at the stack depth. Because the stack depth indicates the exact line of code that caused the exception to be thrown, the severed stack trace will show that offending line of code on top. This can make the line of test code that discovered a problem to be more easily found in IDEs and tools that don't make use of ScalaTest'sStackDepthexceptions directly. - sealed trait Shell extends AnyRef
Trait whose instances provide a
runmethod and configuration fields that implement the ScalaTest shell: its DSL for the Scala interpreter.Trait whose instances provide a
runmethod and configuration fields that implement the ScalaTest shell: its DSL for the Scala interpreter.The main command of the ScalaTest shell is
run, which you can use to run a suite of tests. The shell also provides several commands for configuring a call torun:color(the default) - display results in color (green for success; red for failure; yellow for warning; blue for statistics)nocolor- display results without colordurations- display durations of (i.e., how long it took to run) tests and suitesnodurations(the default) - do not display durations of tests and suitesshortstacks- display short (i.e., truncated to show just the most useful portion) stack traces for all exceptionsfullstacks- display full stack trackes for all exceptionsnostacks(the default) - display no stack trace forStackDepthexceptions and a short stack trace for non-StackDepthexceptionsstats- display statistics before and after the run, such as expected test count before the run and tests succeeded, failed, pending, etc., counts after the runnostats(the default) not display statistics before or after the run
The default configuration is
color,nodurations,nostacks, andnostats.All of these commands are fields of trait
org.scalatest.Shell. Each configuration command is a field that refers to anotherShellinstance with every configuration parameter the same except for the one you've asked to change. For example,durationsprovides aShellinstance that has every parameter configured the same way, except with durations enabled. When you invokerunon that, you will get a run with durations enabled and every other configuration parameter at its default value.The other useful "command" to know about, though not technically part of the shell, is the
applyfactory method in theSuitessingleton object. This allows you to easily create composite suites out of nested suites, which you can then pass torun. This will be demonstrated later in this documentation.Using the ScalaTest shell
The package object of the
org.scalatestpackage, although it does not extendShell, declares all the same members asShell. Itsrunmethod runs with all theShellconfiguration parameters set to their default values. A good way to use the ScalaTest shell, therefore, is to import the members of packageorg.scalatest:scala> import org.scalatest._ import org.scalatest._One thing importing
org.scalatest._allows you to do is access any of ScalaTest's classes and traits by shorter names, for example:scala> class ArithmeticSuite extends FunSuite with matchers.Matchers { | test("addition works") { | 1 + 1 should equal (2) | } | ignore("subtraction works") { | 1 - 1 should equal (0) | } | test("multiplication works") { | 1 * 1 should equal (2) | } | test("division works") (pending) | } defined class ArithmeticSuiteBut importing
org.scalatest._also brings into scope the commands of theShell, so you can, for example, invokerunwithout qualification:scala> run(new ArithmeticSuite) ArithmeticSuite: - addition works - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** 1 did not equal 2 (
:16) - division works (pending)Configuring a single run
To configure a single run, you can prefix run by one or more configuration commands, separated by dots. For example, to enable durations during a single run, you would write:
scala> durations.run(new ArithmeticSuite) ArithmeticSuite: - addition works (102 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (36 milliseconds) 1 did not equal 2 (
:16) - division works (pending)To enable statistics during a single run, you would write:
scala> stats.run(new ArithmeticSuite) Run starting. Expected test count is: 3 ArithmeticSuite: - addition works - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** 1 did not equal 2 (
:16) - division works (pending) Run completed in 386 milliseconds. Total number of tests run: 2 Suites: completed 1, aborted 0 Tests: succeeded 1, failed 1, ignored 1, pending 1 *** 1 TEST FAILED ***And to enable both durations and statistics during a single run, you could write:
scala> durations.stats.run(new ArithmeticSuite) Run starting. Expected test count is: 3 ArithmeticSuite: - addition works (102 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED (36 milliseconds)*** 1 did not equal 2 (
:16) - division works (pending) Run completed in 386 milliseconds. Total number of tests run: 2 Suites: completed 1, aborted 0 Tests: succeeded 1, failed 1, ignored 1, pending 1 *** 1 TEST FAILED ***The order doesn't matter when you are chaining multiple configuration commands. You'll get the same result whether you write
durations.stats.runorstats.durations.run.To disable color, use
nocolor:scala> nocolor.run(new ArithmeticSuite) ArithmeticSuite: - addition works - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** 1 did not equal 2 (:16) - division works (pending) To enable short stack traces during a single run, use
shortstacks:scala> shortstacks.run(new ArithmeticSuite) ArithmeticSuite: - addition works (101 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (33 milliseconds) 1 did not equal 2 (
:16) org.scalatest.exceptions.TestFailedException: ... at line2$object$$iw$$iw$$iw$$iw$ArithmeticSuite$$anonfun$3.apply$mcV$sp( - division works (pending):16) at line2$object$$iw$$iw$$iw$$iw$ArithmeticSuite$$anonfun$3.apply( :16) at line2$object$$iw$$iw$$iw$$iw$ArithmeticSuite$$anonfun$3.apply( :16) at org.scalatest.FunSuite$$anon$1.apply(FunSuite.scala:992) at org.scalatest.Suite$class.withFixture(Suite.scala:1661) at line2$object$$iw$$iw$$iw$$iw$ArithmeticSuite.withFixture( :8) at org.scalatest.FunSuite$class.invokeWithFixture$1(FunSuite.scala:989) ... Changing the default configuration
If you want to change the default for multiple runs, you can import the members of your favorite
Shellconfiguration. For example, if you always like to run with durations and statistics enabled, you could write:scala> import stats.durations._ import stats.durations._Now anytime you run statistics and durations will, by default, be enabled:
scala> run(new ArithmeticSuite) Run starting. Expected test count is: 3 ArithmeticSuite: - addition works (9 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (10 milliseconds) 1 did not equal 2 (
:18) - division works (pending) Run completed in 56 milliseconds. Total number of tests run: 2 Suites: completed 1, aborted 0 Tests: succeeded 1, failed 1, ignored 1, pending 1 *** 1 TEST FAILED ***Running multiple suites
If you want to run multiple suites, you can use the factory method in the
Suitessingleton object. If you wrap a comma-separated list of suite instances insideSuites(...), for example, you'll get a suite instance that contains no tests, but whose nested suites includes the suite instances you placed between the parentheses. You can placeSuitesinsideSuitesto any level of depth, creating a tree of suites to pass torun. Here's a (contrived) example in whichArithmeticSuiteis executed four times:scala> run(Suites(new ArithmeticSuite, new ArithmeticSuite, Suites(new ArithmeticSuite, new ArithmeticSuite))) Run starting. Expected test count is: 12 Suites: ArithmeticSuite: - addition works (0 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (1 millisecond) 1 did not equal 2 (
:16) - division works (pending) ArithmeticSuite: - addition works (1 millisecond) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (0 milliseconds) 1 did not equal 2 (:16) - division works (pending) Suites: ArithmeticSuite: - addition works (0 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (0 milliseconds) 1 did not equal 2 (:16) - division works (pending) ArithmeticSuite: - addition works (0 milliseconds) - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** (0 milliseconds) 1 did not equal 2 (:16) - division works (pending) Run completed in 144 milliseconds. Total number of tests run: 8 Suites: completed 6, aborted 0 Tests: succeeded 4, failed 4, ignored 4, pending 4 *** 4 TESTS FAILED ***Running a single test
The
runcommand also allows you to specify the name of a test to run and/or a config map. You can run a particular test in a suite, for example, by specifying the test name after the suite instance in your call torun, like this:scala> run(new ArithmeticSuite, "addition works") ArithmeticSuite: - addition works
- final class StatefulStatus extends Status with Serializable
Status implementation that can change its state over time.
Status implementation that can change its state over time.
A
StatefulStatusbegins its life in a successful state, and will remain successful unlesssetFailedis called. OncesetFailedis called, the status will remain at failed. ThesetFailedmethod can be called multiple times (even though invoking it once is sufficient to permanently set the status to failed), but only up untilsetCompletedhas been called. AftersetCompletedhas been called, any invocation ofsetFailedwill be greeted with anIllegalStateException.Instances of this class are thread safe.
- sealed trait Status extends AnyRef
The result status of running a test or a suite, which is used to support parallel and asynchronous execution of tests.
The result status of running a test or a suite, which is used to support parallel and asynchronous execution of tests.
This trait is the result type of the "run" lifecycle methods of trait
Suite:run,runNestedSuites,runTests, andrunTest. It can be used to determine whether a test or suite has completed, and if so, whether it succeeded, and if not, whether an exception was thrown that was not yet reported via a ScalaTest event. AStatusis like a domain-specificFuture[Boolean], where:- an activity in which no test failed and no suite aborted is represented by
Success(true) - an activity during which at least one test failed or one suite aborted, but all exceptions that occured
were reported by a ScalaTest events (such as
TestFailedException) is represented bySuccess(false) - an activity during which at least one test failed or one suite aborted and at least one exception occurred that was
not reported via a ScalaTest event is represented by
Failure(unreportedException)
Note that pending and canceled tests will not cause a
Statusto fail. Only failed tests and aborted suites will cause aStatusto fail.One use case of
Statusis to ensure that "after" code (such as anafterEachorafterAllmethod) does not execute until after the relevant entity (one test, one suite, or all of a suite's tests or nested suites) has completed. Another use case is to implement the default behavior of asynchronous styles, in which subsequent each test does not begin execution until after the previous test has completed. - an activity in which no test failed and no suite aborted is represented by
- class Stepwise extends Suite with StepwiseNestedSuiteExecution
A
Suiteclass that takes zero to manySuites, which will be returned from itsnestedSuitesmethod and executed in “stepwise” fashion by itsrunNestedSuitesmethod.A
Suiteclass that takes zero to manySuites, which will be returned from itsnestedSuitesmethod and executed in “stepwise” fashion by itsrunNestedSuitesmethod.For example, you can define a suite that always executes a list of nested suites like this:
class StepsSuite extends Stepwise( new Step1Suite, new Step2Suite, new Step3Suite, new Step4Suite, new Step5Suite )
When
StepsSuiteis executed, regardless of whether aDistributoris passed, it will execute its nested suites sequentially in the passed order:Step1Suite,Step2Suite,Step3Suite,Step4Suite, andStep5Suite.The difference between
StepwiseandSequentialis that althoughStepwiseexecutes its own nested suites sequentially, it passes whatever distributor was passed to it to those nested suites. Thus the nested suites could run their own nested suites and tests in parallel if that distributor is defined. By contrast,Sequentialalways passesNonefor the distributor to the nested suites, so any and every test and nested suite contained within the nested suites passed to theSequentialconstrutor will be executed sequentially.- Exceptions thrown
NullArgumentExceptionifsuitesToNest, or any suite it contains, isnull.
- trait StepwiseNestedSuiteExecution extends SuiteMixin
Trait that causes the nested suites of any suite it is mixed into to be run sequentially even if a
Distributoris passed torunNestedSuites.Trait that causes the nested suites of any suite it is mixed into to be run sequentially even if a
Distributoris passed torunNestedSuites. This trait overrides therunNestedSuitesmethod and fowards every parameter passed to it to a superclass invocation ofrunNestedSuites, except it always passesNonefor theDistributor. Mix in this trait into any suite whose nested suites need to be run sequentially even with the rest of the run is being executed concurrently. - trait Stopper extends AnyRef
Trait whose instances can accept a stop request and indicate whether a stop has already been requested.
Trait whose instances can accept a stop request and indicate whether a stop has already been requested.
This is passed in to the
runmethod ofSuite, so that running suites of tests can be requested to stop early. - trait StreamlinedXml extends AnyRef
Trait providing a
streamlinedmethod that returns aUniformity[T]instance for any subtype ofscala.xml.NodeSeqthat will normalize the XML by removing empty text nodes and trimming non-empty text nodes.Trait providing a
streamlinedmethod that returns aUniformity[T]instance for any subtype ofscala.xml.NodeSeqthat will normalize the XML by removing empty text nodes and trimming non-empty text nodes.Here's an example of some unnormalized XML:
<summer> <day></day> <night> with lots of stars </night> </summer>The
Uniformityreturned by this trait'sstreamlinedmethod would transform the above XML to:<summer><day></day><night>with lots of stars</night></summer>The
streamlinedmethod can be used with theExplicitlyDSL, like this:xmlElem should equal ( <summer> <day></day> <night> with lots of stars </night> </summer> ) (after being streamlined[Elem])The goal of this trait is to provide a normalization for XML that makes it easier to test XML objects for equality. White space is significant in XML, and is taken into account by the default equality for XML, accessed by invoking the
==method on an XMLNodeSeq. Here's an example:scala> val xmlElem = <summer><day></day><night>with lots of stars</night></summer> xmlElem: scala.xml.Elem = <summer><day></day><night>with lots of stars</night></summer> scala> xmlElem == <summer> | <day></day> | <night> | with lots of stars | </night> | </summer> res1: Boolean = falseThe above equality comparison produces false because of whitespace differences in the XML. When such whitespace differences are unimportant to the actual application, it can make it easier to write readable test code if you can compare XML for equality without taking into account empty text nodes, or leading and trailing whitespace in nonempty text nodes. The
streamlinedmethod of this trait provides aUniformityinstance that does just that:scala> import org.scalactic._ import org.scalactic._ scala> import Explicitly._ import Explicitly._ scala> import TripleEquals._ import TripleEquals._ scala> import org.scalatest.StreamlinedXml._ import StreamlinedXml._ scala> import scala.xml.Elem import scala.xml.Elem * scala> (xmlElem === <summer> | <day></day> | <night> | with lots of stars | </night> | </summer>) (after being streamlined[Elem]) res9: Boolean = true - trait StreamlinedXmlEquality extends AnyRef
Trait providing an implicit
Equality[T]for subtypes ofscala.xml.NodeSeqthat before testing for equality, will normalize left and right sides by removing empty XML text nodes and trimming non-empty text nodes.Trait providing an implicit
Equality[T]for subtypes ofscala.xml.NodeSeqthat before testing for equality, will normalize left and right sides by removing empty XML text nodes and trimming non-empty text nodes.Here's an example of some unnormalized XML:
<summer> <day></day> <night> with lots of stars </night> </summer>Prior to testing it for equality, the implicit
Equality[T]provided by this trait would transform the above XML to:<summer><day></day><night>with lots of stars</night></summer>The goal of this trait is to provide an implicit
Equalityfor XML that makes it easier to write tests involving XML. White space is significant in XML, and is taken into account by the default equality for XML, accessed by invoking the==method on an XMLNodeSeq. Here's an example:scala> val xmlElem = <summer><day></day><night>with lots of stars</night></summer> xmlElem: scala.xml.Elem = <summer><day></day><night>with lots of stars</night></summer> scala> import org.scalatest.Assertions._ import org.scalatest.Assertions._ scala> assert(xmlElem === <summer> | <day></day> | <night> | with lots of stars | </night> | </summer>) org.scalatest.exceptions.TestFailedException: <summer><day></day><night>with lots of stars</night></summer> did not equal <summer> <day></day> <night> with lots of stars </night> </summer> at org.scalatest.Assertions$class.newAssertionFailedException(Assertions.scala:500) at org.scalatest.Assertions$.newAssertionFailedException(Assertions.scala:1538) at org.scalatest.Assertions$AssertionsHelper.macroAssert(Assertions.scala:466) ... 53 elidedThe above assertion fails because of whitespace differences in the XML. When such whitespace differences are unimportant to the actual application, it can make it easier to write readable test code if you can compare XML for equality without taking into account empty text nodes, or leading and trailing whitespace in nonempty text nodes. This trait provides an
Equality[T]instance that does just that:scala> import org.scalatest.StreamlinedXmlEquality._ import org.scalatest.StreamlinedXmlEquality._ scala> assert(xmlElem === <summer> | <day></day> | <night> | with lots of stars | </night> | </summer>) - trait StreamlinedXmlNormMethods extends StreamlinedXml with NormMethods
Subtrait of
NormMethodsthat provides an implicitUniformity[T]for subtypes ofscala.xml.NodeSeqthat enables you to streamline XML by invoking.normon it.Subtrait of
NormMethodsthat provides an implicitUniformity[T]for subtypes ofscala.xml.NodeSeqthat enables you to streamline XML by invoking.normon it.Here's an example:
scala> <good><day>sunshine</day></good> == <good> | <day> | sunshine | </day> | </good> res1: Boolean = false scala> import org.scalactic._ import org.scalactic._ scala> import TripleEquals._ import TripleEquals._ scala> import org.scalatest.StreamlinedXmlNormMethods._ import org.scalatest.StreamlinedXmlNormMethods._ scala> <good><day>sunshine</day></good> === <good> | <day> | sunshine | </day> | </good>.norm res2: Boolean = true - trait Suite extends Assertions with Serializable
A suite of tests.
A suite of tests. A
Suiteinstance encapsulates a conceptual suite (i.e., a collection) of tests.This trait provides an interface composed of "lifecycle methods" that allow suites of tests to be run. Its implementation enables a default way of writing and executing tests. Subtraits and subclasses can override
Suite's lifecycle methods to enable other ways of writing and executing tests.Nested suites
A
Suitecan refer to a collection of otherSuites, which are called nestedSuites. Those nestedSuites can in turn have their own nestedSuites, and so on. Large test suites can be organized, therefore, as a tree of nestedSuites. This trait'srunmethod, in addition to invoking its test methods, invokesrunon each of its nestedSuites.A
Listof aSuite's nestedSuites can be obtained by invoking itsnestedSuitesmethod. If you wish to create aSuitethat serves as a container for nestedSuites, whether or not it has test methods of its own, simply overridenestedSuitesto return aListof the nestedSuites. Because this is a common use case, ScalaTest provides a convenienceSuitesclass, which takes a variable number of nestedSuites as constructor parameters. Here's an example:package org.scalatest.examples.suite.nested
import org.scalatest._
class ASuite extends FunSuite { test("A should have ASCII value 41 hex") { assert('A' === 0x41) } test("a should have ASCII value 61 hex") { assert('a' === 0x61) } } class BSuite extends FunSuite { test("B should have ASCII value 42 hex") { assert('B' === 0x42) } test("b should have ASCII value 62 hex") { assert('b' === 0x62) } } class CSuite extends FunSuite { test("C should have ASCII value 43 hex") { assert('C' === 0x43) } test("c should have ASCII value 63 hex") { assert('c' === 0x63) } }
class ASCIISuite extends Suites( new ASuite, new BSuite, new CSuite )If you now run
ASCIISuite:scala> org.scalatest.run(new ASCIISuite)
You will see reports printed to the standard output that indicate the nested suites—
ASuite,BSuite, andCSuite—were run:ASCIISuite: ASuite: - A should have ASCII value 41 hex - a should have ASCII value 61 hex BSuite: - B should have ASCII value 42 hex - b should have ASCII value 62 hex CSuite: - C should have ASCII value 43 hex - c should have ASCII value 63 hexNote that
Runnercan discoverSuites automatically, so you need not necessarily define nestedSuitesexplicitly. See the documentation forRunnerfor more information.The config map
In some cases you may need to pass information to a suite of tests. For example, perhaps a suite of tests needs to grab information from a file, and you want to be able to specify a different filename during different runs. You can accomplish this in ScalaTest by passing the filename in a config map of key-value pairs, which is passed to
runas aConfigMap. The values in the config map are called "config objects," because they can be used to configure suites, reporters, and tests.You can specify a string config object is via the ScalaTest
Runner, either via the command line or ScalaTest's ant task. (See the documentation for Runner for information on how to specify config objects on the command line.) The config map is passed torun,runNestedSuites,runTests, andrunTest, so one way to access it in your suite is to override one of those methods. If you need to use the config map inside your tests, you can access it from theNoArgTestpassed towithFixture, or theOneArgTestpassed towithFixturein the traits in theorg.scalatest.fixturepackage. (See the documentation forFixtureSuitefor instructions on how to access the config map in tests.)Executing suites in parallel
The
runmethod takes as one of its parameters an optionalDistributor. If aDistributoris passed in, this trait's implementation ofrunputs its nestedSuites into the distributor rather than executing them directly. The caller ofrunis responsible for ensuring that some entity runs theSuites placed into the distributor. The-Pcommand line parameter toRunner, for example, will causeSuites put into theDistributorto be run in parallel via a pool of threads. If you wish to execute the tests themselves in parallel, mix inParallelTestExecution."Run-aborting" exceptions
The Javadoc documentation for
java.lang.Errorstates:An
Erroris a subclass ofThrowablethat indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.Because
Errors are used to denote serious errors, traitSuiteand its subtypes in the ScalaTest API do not always treat a test that completes abruptly with anErroras a test failure, but sometimes as an indication that serious problems have arisen that should cause the run to abort. For example, if a test completes abruptly with anOutOfMemoryError, it will not be reported as a test failure, but will instead cause the run to abort. Because not everyone usesErrors only to represent serious problems, however, ScalaTest only behaves this way for the following run-aborting exception types (and their subclasses):java.lang.annotation.AnnotationFormatErrorjava.awt.AWTErrorjava.nio.charset.CoderMalfunctionErrorjavax.xml.parsers.FactoryConfigurationErrorjava.lang.LinkageErrorjava.lang.ThreadDeathjavax.xml.transform.TransformerFactoryConfigurationErrorjava.lang.VirtualMachineError
The previous list includes all
Errors that exist as part of Java 1.5 API, excludingjava.lang.AssertionError. ScalaTest does treat a thrownAssertionErroras an indication of a test failure. In addition, any otherErrorthat is not an instance of a type mentioned in the previous list will be caught by theSuitetraits in the ScalaTest API and reported as the cause of a test failure.Although trait
Suiteand all its subtypes in the ScalaTest API consistently behave this way with regard toErrors, this behavior is not required by the contract ofSuite. Subclasses and subtraits that you define, for example, may treat allErrors as test failures, or indicate errors in some other way that has nothing to do with exceptions.Extensibility
Trait
Suiteprovides default implementations of its methods that should be sufficient for most applications, but many methods can be overridden when desired. Here's a summary of the methods that are intended to be overridden:run- override this method to define custom ways to run suites of tests.runNestedSuites- override this method to define custom ways to run nested suites.runTests- override this method to define custom ways to run a suite's tests.runTest- override this method to define custom ways to run a single named test.testNames- override this method to specify theSuite's test names in a custom way.tags- override this method to specify theSuite's test tags in a custom way.nestedSuites- override this method to specify theSuite's nestedSuites in a custom way.suiteName- override this method to specify theSuite's name in a custom way.expectedTestCount- override this method to count thisSuite's expected tests in a custom way.
For example, this trait's implementation of
testNamesperforms reflection to discover methods starting withtest, and places these in aSetwhose iterator returns the names in alphabetical order. If you wish to run tests in a different order in a particularSuite, perhaps because a test namedtestAlphacan only succeed after a test namedtestBetahas run, you can overridetestNamesso that it returns aSetwhose iterator returnstestBetabeforetestAlpha. (This trait's implementation ofrunwill invoke tests in the order they come out of thetestNamesSetiterator.)Alternatively, you may not like starting your test methods with
test, and prefer using@Testannotations in the style of Java's JUnit 4 or TestNG. If so, you can overridetestNamesto discover tests using either of these two APIs@Testannotations, or one of your own invention. (This is in fact howorg.scalatest.junit.JUnitSuiteandorg.scalatest.testng.TestNGSuitework.)Moreover, test in ScalaTest does not necessarily mean test method. A test can be anything that can be given a name, that starts and either succeeds or fails, and can be ignored. In
org.scalatest.FunSuite, for example, tests are represented as function values. This approach might look foreign to JUnit users, but may feel more natural to programmers with a functional programming background. To facilitate this style of writing tests,FunSuiteoverridestestNames,runTest, andrunsuch that you can define tests as function values.You can also model existing JUnit 3, JUnit 4, or TestNG tests as suites of tests, thereby incorporating tests written in Java into a ScalaTest suite. The "wrapper" classes in packages
org.scalatest.junitandorg.scalatest.testngexist to make this easy. No matter what legacy tests you may have, it is likely you can create or use an existingSuitesubclass that allows you to model those tests as ScalaTest suites and tests and incorporate them into a ScalaTest suite. You can then write new tests in Scala and continue supporting older tests in Java. - trait SuiteMixin extends AnyRef
Trait defining abstract "lifecycle" methods that are implemented in
Suiteand can be overridden in stackable modification traits.Trait defining abstract "lifecycle" methods that are implemented in
Suiteand can be overridden in stackable modification traits.The main purpose of
SuiteMixinis to differentiate coreSuitestyle traits, such asSpec,FunSuite, andFunSpecfrom stackable modification traits forSuites such asBeforeAndAfterEach,OneInstancePerTest, andSequentialNestedSuiteExecution. Because these stackable traits extendSuiteMixininstead ofSuite, you can't define a suite by simply extending one of the stackable traits:class MySuite extends BeforeAndAfterEach // Won't compile
Instead, you need to extend a core
Suitetrait and mix the stackableBeforeAndAfterEachtrait into that, like this:class MySuite extends FunSuite with BeforeAndAfterEach // Compiles fine
- class Suites extends Suite
A
Suiteclass that takes zero to manySuites in its constructor, which will be returned from itsnestedSuitesmethod.A
Suiteclass that takes zero to manySuites in its constructor, which will be returned from itsnestedSuitesmethod.For example, you can define a suite that always executes a list of nested suites like this:
class StepsSuite extends Suites( new Step1Suite, new Step2Suite, new Step3Suite, new Step4Suite, new Step5Suite )
If
StepsSuiteis executed sequentially, it will execute its nested suites in the passed order:Step1Suite,Step2Suite,Step3Suite,Step4Suite, andStep5Suite. IfStepsSuiteis executed in parallel, the nested suites will be executed concurrently.- Exceptions thrown
NullPointerExceptionifsuitesToNest, or any suite it contains, isnull.
- class Tag extends AnyRef
Class whose subclasses can be used to tag tests in style traits in which tests are defined as functions.
Class whose subclasses can be used to tag tests in style traits in which tests are defined as functions.
ScalaTest has two ways to tag tests: annotations and instances of this
Tagclass. To tag a test method or an entire test class, you use a tag annotation, whereas to tag a test function, you use aTagobject. Though not required, it is usually a good idea to define both an annotation and a correspondingTagobject for each conceptual tag you want, so you can tag anything: test functions, test classes, and test methods. The name of the conceptual tag is the fully qualified name of the annotation interface, so you must pass this name to theTagconstructor.For example, imagine you want to tag integration tests that use the actual database, and are, therefore, generally slower. You could create a tag annotation and object called
DbTest. To give them both the same simple name, you can declare them in different packages. The tag annotation must be written in Java, not Scala, because annotations written in Scala are not accessible at runtime. Here's an example:package com.mycompany.myproject.testing.tags; import java.lang.annotation.*; import org.scalatest.TagAnnotation @TagAnnotation @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface DbTest {}Given this annotation's fully qualified name is
com.mycompany.myproject.testing.tags.DbTestthe correspondingTagobject decaration must have that name passed to its constructor, like this:package com.mycompany.myproject.testing.tagobjects
object DbTest extends Tag("com.mycompany.myproject.testing.tags.DbTest")Given these definitions, you could tag a test function as a
DbTestin, for example, aFlatSpeclike this:import org.scalatest.FlatSpec import com.mycompany.myproject.testing.tagobjects.DbTest
class ExampleSpec extends FlatSpec {
"Integration tests" can "sometimes be slow" taggedAs(DbTest) in { Thread.sleep(1000) } }You could tag a test method as a
DbTestin, for example, aSuitelike this:import org.scalatest.Suite import com.mycompany.myproject.testing.tags.DbTest
class ExampleSuite extends Suite {
@DbTest def `integration tests can sometimes be slow` { Thread.sleep(1000) } }And you could tag all the tests in an entire test class by annotating the class, like this:
import org.scalatest.FlatSpec import com.mycompany.myproject.testing.tags.DbTest
@DBTest class ExampleSpec extends FlatSpec {
"Integration tests" can "sometimes be slow" in { Thread.sleep(1000) }
they should "likely sometimes be excluded " in { Thread.sleep(1000) } }In the previous example, both tests will be tagged as
DBTests even though the tests are not tagged as such individually.When you run ScalaTest and want to either include or exclude
DbTests, you'd give the fully qualified name of the tag annotation (which is also the name passed to the correspondingTagconstructor) toRunner. For example, here's how you'd excludeDbTests on theRunnercommand line:-l com.mycompany.myproject.testing.tags.DbTest
For examples of tagging in other style traits, see the "Tagging tests" section in the documentation for the trait:
- trait TagAnnotation extends Annotation
Annotation used to annotate annotation interfaces that define tags for ScalaTest tests.
Annotation used to annotate annotation interfaces that define tags for ScalaTest tests.
Note: This is actually an annotation defined in Java, not a Scala trait. It must be defined in Java instead of Scala so it will be accessible at runtime. It has been inserted into Scaladoc by pretending it is a trait.
ScalaTest will only consider annotations that are themselves annotated with
TagAnnotationas tag annotations, to avoid accidentally interpreting arbitrary annotations as tags. You useTagAnnotation, therefore, when you define a tag annotation (which you must do in Java). Here's an example:package com.mycompany.myproject.testing.tags; import java.lang.annotation.*; import org.scalatest.TagAnnotation * @TagAnnotation @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface DbTest {}For more information, see the documentation for class
Tag. - trait TestData extends AnyRef
A bundle of information about the current test.
A bundle of information about the current test.
A
TestDataobject is passed to thewithFixturemethods of traitsSuiteandFixtureSuite(bothNoArgTestandOneArgTestextendTestData) and to thebeforeEachandafterEachmethods of traitBeforeAndAfterEach. This enables fixtures and tests to make use of the test name and configuration objects in the config map.In ScalaTest's event model, a test may be surrounded by “scopes.” Each test and scope is associated with string of text. A test's name is a concatenation of the text of any surrounding scopes followed by the text provided with the test itself, after each text element has been trimmed and one space inserted between each component. Here's an example:
package org.scalatest.examples.freespec
import org.scalatest.FreeSpec
class SetSpec extends FreeSpec {
"A Set" - { "when empty" - { "should have size 0" in { assert(Set.empty.size === 0) }
"should produce NoSuchElementException when head is invoked" in { assertThrows[NoSuchElementException] { Set.empty.head } } } } }The above
FreeSpeccontains two tests, both nested inside the same two scopes. The outermost scope names the subject,A Set. The nested scope qualifies the subject withwhen empty. Inside that scope are the two tests. The text of the tests are:should have size 0should produce NoSuchElementException when head is invoked
Therefore, the names of these two tests are:
A Stack when empty should have size 0A Stack when empty should produce NoSuchElementException when head is invoked
The
TestDatainstance for the first test would contain:name:"A Stack when empty should have size 0"scopes:collection.immutable.IndexedSeq("A Stack", "when empty")text:"should have size 0"
- trait TestSuite extends Suite
The base trait of ScalaTest's synchronous testing styles, which defines a
withFixturelifecycle method that accepts as its parameter a test function that returns anOutcome.The base trait of ScalaTest's synchronous testing styles, which defines a
withFixturelifecycle method that accepts as its parameter a test function that returns anOutcome.The
withFixturemethod add by this trait has the following signature and implementation:def withFixture(test: NoArgTest): Outcome = { test() }
The
applymethod of test function interface,NoArgTest, also returnsOutcome:// In trait NoArgTest: def apply(): Outcome
Because the result of a test is an
Outcome, when the test function returns, the test body must have determined an outcome already. It will already be one ofSucceeded,Failed,Canceled, or Pending. This is also true whenwithFixture(NoArgTest)returns: because the result type ofwithFixture(NoArgTest)isOutcome, the test has by definition already finished execution.The recommended way to ensure cleanup is performed after a test body finishes execution is to use a
try-finallyclause. Usingtry-finallywill ensure that cleanup will occur whether the test function completes abruptly by throwing a suite-aborting exception, or returns normally yielding anOutcome. Note that the only situation in which a test function will complete abruptly with an exception is if the test body throws a suite-aborting exception. Any other exception will be caught and reported as either aFailed,Canceled, orPending.The
withFixturemethod is designed to be stacked, and to enable this, you should always call thesuperimplementation ofwithFixture, and let it invoke the test function rather than invoking the test function directly. In other words, instead of writing “test()”, you should write “super.withFixture(test)”. Thus, the recommended structure of awithFixtureimplementation that performs cleanup looks like this:// Your implementation override def withFixture(test: NoArgTest) = { // Perform setup here try { super.withFixture(test) // Invoke the test function } finally { // Perform cleanup here } }
If you have no cleanup to perform, you can write
withFixturelike this instead:// Your implementation override def withFixture(test: NoArgTest) = { // Perform setup here super.withFixture(test) // Invoke the test function }
If you want to perform an action only for certain outcomes, you can use a pattern match. For example, if you want to perform an action if a test fails, you'd match on
Failed, like this:// Your implementation override def withFixture(test: NoArgTest) = {
// Perform setup here
val outcome = super.withFixture(test) // Invoke the test function
outcome match { case failed: Failed => // perform action that you want to occur // only if a test fails here failed case other => other } }If you want to change the outcome in some way in
withFixture, you can also use a pattern match. For example, if a particular exception intermittently causes a test to fail, and can transform those failures into cancelations, like this:// Your implementation override def withFixture(test: NoArgTest) = {
super.withFixture(test) match { case Failed(ex: ParticularException) => Canceled("Muting flicker", ex) case other => other } } - trait TestSuiteMixin extends SuiteMixin
Trait defining abstract "lifecycle" methods that are implemented in
TestSuiteand can be overridden in stackable modification traits.Trait defining abstract "lifecycle" methods that are implemented in
TestSuiteand can be overridden in stackable modification traits.The main use case for this trait is to override
withFixturein a mixin trait. Here's an example:trait Builder extends TestSuiteMixin { this: TestSuite =>
val builder = new StringBuilder
abstract override def withFixture(test: NoArgTest) = { builder.append("ScalaTest is ") try super.withFixture(test) // To be stackable, must call super.withFixture finally builder.clear() } } - trait TestsBeforeNestedSuites extends SuiteMixin
SuiteMixintrait that overridesrunto execute tests before nested suites.SuiteMixintrait that overridesrunto execute tests before nested suites.The default behavior of
runexecutes nested suites before running tests declared in this suite. This trait overridesrunand executes this suites's tests first, then executes its nested suites. - final class Tracker extends AnyRef
Class that tracks the progress of a series of
Ordinals produced by invokingnextandnextNewOldPairon the currentOrdinal.Class that tracks the progress of a series of
Ordinals produced by invokingnextandnextNewOldPairon the currentOrdinal.Instances of this class are thread safe. Multiple threads can invoke
nextOrdinalandnextTrackerconcurrently. This facilitates multi-threaded tests that sendinfoProvidedreports concurrently. When using aDispatcherto execute suites in parallel, the intention is that eachTrackerwill only be used by one thread. For example, if the optionalDispatcherpassed toSuite's implementation of runNestedSuites is defined, that method will obtain a newTrackerby invokingnextTrackerfor each nested suite it passes to theDispatcher. - trait TryValues extends AnyRef
Trait that provides an implicit conversion that adds
successandfailuremethods toscala.util.Try, enabling you to make assertions about the value of aSuccessor the exception of aFailure.Trait that provides an implicit conversion that adds
successandfailuremethods toscala.util.Try, enabling you to make assertions about the value of aSuccessor the exception of aFailure.The
successmethod will return theTryon which it is invoked as aSuccessif theTryactually is aSuccess, or throwTestFailedExceptionif not. Thefailuremethod will return theTryon which it is invoked as aFailureif theTryactually is aFailure, or throwTestFailedExceptionif not.This construct allows you to express in one statement that an
Tryshould be either aSuccessor aFailureand that its value or exception, respectively,should meet some expectation. Here's an example:try1.success.value should be > 9 try2.failure.exception should have message "/ by zero"
Or, using assertions instead of a matchers:
assert(try1.success.value > 9) assert(try2.failure.exception.getMessage == "/ by zero")
Were you to simply invoke
geton theTry, if theTrywasn't aSuccess, it would throw the exception contained in theFailure:val try2 = Try { 1 / 0 }
try2.get should be < 9 // try2.get throws ArithmeticExceptionThe
ArithmeticExceptionwould cause the test to fail, but without providing a stack depth pointing to the failing line of test code. This stack depth, provided byTestFailedException(and a few other ScalaTest exceptions), makes it quicker for users to navigate to the cause of the failure. WithoutTryValues, to get a stack depth exception you would need to make two statements, like this:try2 should be a 'success // throws TestFailedException try2.get should be < 9
The
TryValuestrait allows you to state that more concisely:try2.success.value should be < 9 // throws TestFailedException
- trait WrapWith extends Annotation
Annotation to associate a wrapper suite with a non-
Suiteclass, so it can be run via ScalaTest.Annotation to associate a wrapper suite with a non-
Suiteclass, so it can be run via ScalaTest.Note: This is actually an annotation defined in Java, not a Scala trait. It must be defined in Java instead of Scala so it will be accessible at runtime. It has been inserted into Scaladoc by pretending it is a trait.
A class will be considered annotated with
WrapWithif it is annotated directly or one of its superclasses (but not supertraits) are annotated withWrapWith. The wrapper suite must have a public, one-arg constructor that takes aClassinstance whose type parameter is compatible with the class to wrap: i.e., the class being annotated withWrapWith. ScalaTest will load the class to wrap and construct a new instance of the wrapper suite, passing in theClassinstance for the class to wrap. Here's an example:import org.scalacheck.Properties @WrapWith(classOf[ScalaCheckPropertiesSpec]) class StringSpecification extends Properties("String") { // ... }The
ScalaCheckPropertiesSpecwould need to have a public, no-arg constructor that accepts subclasses oforg.scalacheck.Properties:import org.scalacheck.Properties import org.scalatest.Suite class ScalaCheckPropertiesSpec(clazz: Class[_ <: Properties]) extends Suite { // ... }
Deprecated Type Members
- type AsyncFeatureSpec = scalatest.featurespec.AsyncFeatureSpec
The name
org.scalatest.AsyncFeatureSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AsyncFeatureSpec, instead.The name
org.scalatest.AsyncFeatureSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AsyncFeatureSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFeatureSpec trait has been moved and renamed. Please use org.scalatest.featurespec.AsyncFeatureSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFeatureSpecLike = scalatest.featurespec.AsyncFeatureSpecLike
The name
org.scalatest.AsyncFeatureSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AsyncFeatureSpecLike, instead.The name
org.scalatest.AsyncFeatureSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AsyncFeatureSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFeatureSpecLike trait has been moved and renamed. Please use org.scalatest.featurespec.AsyncFeatureSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFlatSpec = scalatest.flatspec.AsyncFlatSpec
The name
org.scalatest.AsyncFlatSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AsyncFlatSpec, instead.The name
org.scalatest.AsyncFlatSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AsyncFlatSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFlatSpec trait has been moved and renamed. Please use org.scalatest.flatspec.AsyncFlatSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFlatSpecLike = scalatest.flatspec.AsyncFlatSpecLike
The name
org.scalatest.AsyncFlatSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AsyncFlatSpecLike, instead.The name
org.scalatest.AsyncFlatSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AsyncFlatSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFlatSpecLike trait has been moved and renamed. Please use org.scalatest.flatspec.AsyncFlatSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFreeSpec = scalatest.freespec.AsyncFreeSpec
The name
org.scalatest.AsyncFreeSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AsyncFreeSpec, instead.The name
org.scalatest.AsyncFreeSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AsyncFreeSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFreeSpec trait has been moved and renamed. Please use org.scalatest.freespec.AsyncFreeSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFreeSpecLike = scalatest.freespec.AsyncFreeSpecLike
The name
org.scalatest.AsyncFreeSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AsyncFreeSpecLike, instead.The name
org.scalatest.AsyncFreeSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AsyncFreeSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFreeSpecLike trait has been moved and renamed. Please use org.scalatest.freespec.AsyncFreeSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFunSpec = scalatest.funspec.AsyncFunSpec
The name
org.scalatest.AsyncFunSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AsyncFunSpec, instead.The name
org.scalatest.AsyncFunSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AsyncFunSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFunSpec trait has been moved and renamed. Please use org.scalatest.funspec.AsyncFunSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFunSpecLike = scalatest.funspec.AsyncFunSpecLike
The name
org.scalatest.AsyncFunSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AsyncFunSpecLike, instead.The name
org.scalatest.AsyncFunSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AsyncFunSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFunSpecLike trait has been moved and renamed. Please use org.scalatest.funspec.AsyncFunSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFunSuite = scalatest.funsuite.AsyncFunSuite
The name
org.scalatest.AsyncFunSuitehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AsyncFunSuite, instead.The name
org.scalatest.AsyncFunSuitehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AsyncFunSuite, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFunSuite trait has been moved and renamed. Please use org.scalatest.funsuite.AsyncFunSuite instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncFunSuiteLike = scalatest.funsuite.AsyncFunSuiteLike
The name
org.scalatest.AsyncFunSuiteLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AsyncFunSuiteLike, instead.The name
org.scalatest.AsyncFunSuiteLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AsyncFunSuiteLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncFunSuiteLike trait has been moved and renamed. Please use org.scalatest.funsuite.AsyncFunSuiteLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- trait AsyncTestRegistration extends AnyRef
The
org.scalatest.AsyncTestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.The
org.scalatest.AsyncTestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.Trait declaring methods that can be used to register by-name test functions that have result type
Future[Assertion].- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncTestRegistration trait has been deprecated and will be removed in a future version of ScalaTest. No replacement is planned.
- type AsyncWordSpec = scalatest.wordspec.AsyncWordSpec
The name
org.scalatest.AsyncWordSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AsyncWordSpec, instead.The name
org.scalatest.AsyncWordSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AsyncWordSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncWordSpec trait has been moved and renamed. Please use org.scalatest.wordspec.AsyncWordSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type AsyncWordSpecLike = scalatest.wordspec.AsyncWordSpecLike
The name
org.scalatest.AsyncWordSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AsyncWordSpecLike, instead.The name
org.scalatest.AsyncWordSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AsyncWordSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.AsyncWordSpecLike trait has been moved and renamed. Please use org.scalatest.wordspec.AsyncWordSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type DiagrammedAssertions = Diagrams
The name
org.scalatest.DiagrammedAssertionshas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.diagrams.Diagrams, instead.The name
org.scalatest.DiagrammedAssertionshas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.diagrams.Diagrams, instead.This type has been renamed to suport future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.DiagrammedAssertions trait has been moved and renamed. Please use org.scalatest.diagrams.Diagrams instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FeatureSpec = AnyFeatureSpec
The name
org.scalatest.FeatureSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AnyFeatureSpec, instead.The name
org.scalatest.FeatureSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AnyFeatureSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FeatureSpec trait has been moved and renamed. Please use org.scalatest.featurespec.AnyFeatureSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FeatureSpecLike = AnyFeatureSpecLike
The name
org.scalatest.FeatureSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AnyFeatureSpecLike, instead.The name
org.scalatest.FeatureSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.featurespec.AnyFeatureSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FeatureSpecLike trait has been moved and renamed. Please use org.scalatest.featurespec.AnyFeatureSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- trait FixtureAsyncTestRegistration extends AnyRef
The
org.scalatest.FixtureAsyncTestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.The
org.scalatest.FixtureAsyncTestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.Trait declaring methods that can be used to register test functions that accept a fixture parameter and have result type
Future[Assertion].- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FixtureAsyncTestRegistration trait has been deprecated and will be removed in a future version of ScalaTest. No replacement is planned.
- trait FixtureTestRegistration extends AnyRef
The
org.scalatest.FixtureTestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.The
org.scalatest.FixtureTestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.Trait declaring methods that can be used to register test functions that accept a fixture parameter and have any result type.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FixtureTestRegistration trait has been deprecated and will be removed in a future version of ScalaTest. No replacement is planned.
- type FlatSpec = AnyFlatSpec
The name
org.scalatest.FlatSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AnyFlatSpec, instead.The name
org.scalatest.FlatSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AnyFlatSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FlatSpec trait has been moved and renamed. Please use org.scalatest.flatspec.AnyFlatSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FlatSpecLike = AnyFlatSpecLike
The name
org.scalatest.FlatSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AnyFlatSpecLike, instead.The name
org.scalatest.FlatSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.flatspec.AnyFlatSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FlatSpecLike trait has been moved and renamed. Please use org.scalatest.flatspec.AnyFlatSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FreeSpec = AnyFreeSpec
The name
org.scalatest.FreeSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AnyFreeSpec, instead.The name
org.scalatest.FreeSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AnyFreeSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FreeSpec trait has been moved and renamed. Please use org.scalatest.freespec.AnyFreeSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FreeSpecLike = AnyFreeSpecLike
The name
org.scalatest.FreeSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AnyFreeSpecLike, instead.The name
org.scalatest.FreeSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.freespec.AnyFreeSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FreeSpecLike trait has been moved and renamed. Please use org.scalatest.freespec.AnyFreeSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FunSpec = AnyFunSpec
The name
org.scalatest.FunSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AnyFunSpec, instead.The name
org.scalatest.FunSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AnyFunSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FunSpec trait has been moved and renamed. Please use org.scalatest.funspec.AnyFunSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FunSpecLike = AnyFunSpecLike
The name
org.scalatest.FunSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AnyFunSpecLike, instead.The name
org.scalatest.FunSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funspec.AnyFunSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FunSpecLike trait has been moved and renamed. Please use org.scalatest.funspec.AnyFunSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FunSuite = AnyFunSuite
The name
org.scalatest.FunSuitehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AnyFunSuite, instead.The name
org.scalatest.FunSuitehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AnyFunSuite, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FunSuite trait has been moved and renamed. Please use org.scalatest.funsuite.AnyFunSuite instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type FunSuiteLike = AnyFunSuiteLike
The name
org.scalatest.FunSuiteLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AnyFunSuiteLike, instead.The name
org.scalatest.FunSuiteLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.funsuite.AnyFunSuiteLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.FunSuiteLike trait has been moved and renamed. Please use org.scalatest.funsuite.AnyFunSuiteLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type Matchers = scalatest.matchers.should.Matchers
The name
org.scalatest.Matchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.should.Matchers, instead.The name
org.scalatest.Matchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.should.Matchers, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.Matchers trait has been moved and renamed. Please use org.scalatest.matchers.should.Matchers instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type MustMatchers = scalatest.matchers.must.Matchers
The name
org.scalatest.MustMatchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.must.Matchers, instead.The name
org.scalatest.MustMatchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.must.Matchers, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.MustMatchers trait has been moved and renamed. Please use org.scalatest.matchers.must.Matchers instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type PropSpec = AnyPropSpec
The name
org.scalatest.PropSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.propspec.AnyPropSpec, instead.The name
org.scalatest.PropSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.propspec.AnyPropSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.PropSpec trait has been moved and renamed. Please use org.scalatest.propspec.AnyPropSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type PropSpecLike = AnyPropSpecLike
The name
org.scalatest.PropSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.propspec.AnyPropSpecLike, instead.The name
org.scalatest.PropSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.propspec.AnyPropSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.PropSpecLike trait has been moved and renamed. Please use org.scalatest.propspec.AnyPropSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- trait Rerunner extends AnyRef
Trait whose instances can rerun tests or other entities (such as suites).
Trait whose instances can rerun tests or other entities (such as suites). An object extending this trait can be passed to a
Reporteras part of aReport. The test or other entity about which the report is made can then be rerun by invoking thererunmethod on theRerunnable.- Annotations
- @deprecated
- Deprecated
We are considering removing Rerunner in ScalaTest 2.0 and would like to know if anyone is using it. If you are, please email scalatest-users@googlegroups.com or and describe your use case. Thanks!
- trait TestRegistration extends AnyRef
The
org.scalatest.TestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.The
org.scalatest.TestRegistrationhas been deprecated and will be removed in a future version of ScalaTest. We do not plan a replacement.Trait declaring methods that can be used to register by-name test functions that have any result type.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.TestRegistration trait has been deprecated and will be removed in a future version of ScalaTest. No replacement is planned.
- type WordSpec = AnyWordSpec
The name
org.scalatest.WordSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AnyWordSpec, instead.The name
org.scalatest.WordSpechas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AnyWordSpec, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.WordSpec trait has been moved and renamed. Please use org.scalatest.wordspec.AnyWordSpec instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- type WordSpecLike = AnyWordSpecLike
The name
org.scalatest.WordSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AnyWordSpecLike, instead.The name
org.scalatest.WordSpecLikehas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.wordspec.AnyWordSpecLike, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.WordSpecLike trait has been moved and renamed. Please use org.scalatest.wordspec.AnyWordSpecLike instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
Value Members
- val ScalaTestVersion: String
The version number of ScalaTest.
The version number of ScalaTest.
- returns
the ScalaTest version number.
- lazy val color: Shell
Returns a copy of this
ShellwithcolorPassedconfiguration parameter set totrue. - lazy val durations: Shell
Returns a copy of this
ShellwithdurationsPassedconfiguration parameter set totrue. - lazy val fullstacks: Shell
Returns a copy of this
ShellwithfullStacksPassedconfiguration parameter set totrue. - lazy val nocolor: Shell
Returns a copy of this
ShellwithcolorPassedconfiguration parameter set tofalse. - lazy val nodurations: Shell
Returns a copy of this
ShellwithdurationsPassedconfiguration parameter set tofalse. - lazy val nostacks: Shell
Returns a copy of this
ShellwithshortStacksPassedconfiguration parameter set tofalse. - lazy val nostats: Shell
Returns a copy of this
ShellwithstatsPassedconfiguration parameter set tofalse. - lazy val shortstacks: Shell
Returns a copy of this
ShellwithshortStacksPassedconfiguration parameter set totrue. - lazy val stats: Shell
Returns a copy of this
ShellwithstatsPassedconfiguration parameter set totrue. - object AppendedClues extends AppendedClues
Companion object that facilitates the importing of
AppendedCluesmembers as an alternative to mixing it in.Companion object that facilitates the importing of
AppendedCluesmembers as an alternative to mixing it in. One use case is to importAppendedCluesmembers so you can use them in the Scala interpreter. - object Assertions extends Assertions
Companion object that facilitates the importing of
Assertionsmembers as an alternative to mixing it in.Companion object that facilitates the importing of
Assertionsmembers as an alternative to mixing it in. One use case is to importAssertionsmembers so you can use them in the Scala interpreter:$scala -classpath scalatest.jar Welcome to Scala version 2.7.3.final (Java HotSpot(TM) Client VM, Java 1.5.0_16). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest.Assertions._ import org.scalatest.Assertions._ scala> assert(1 === 2) org.scalatest.TestFailedException: 1 did not equal 2 at org.scalatest.Assertions$class.assert(Assertions.scala:211) at org.scalatest.Assertions$.assert(Assertions.scala:511) at .<init>(<console>:7) at .<clinit>(<console>) at RequestResult$.<init>(<console>:3) at RequestResult$.<clinit>(<console>) at RequestResult$result(<console>) at sun.reflect.NativeMethodAccessorImpl.invoke... scala> assertResult(3) { 1 + 3 } org.scalatest.TestFailedException: Expected 3, but got 4 at org.scalatest.Assertions$class.expect(Assertions.scala:447) at org.scalatest.Assertions$.expect(Assertions.scala:511) at .<init>(<console>:7) at .<clinit>(<console>) at RequestResult$.<init>(<console>:3) at RequestResult$.<clinit>(<console>) at RequestResult$result(<console>) at sun.reflect.NativeMethodAccessorImpl.in... scala> val caught = intercept[StringIndexOutOfBoundsException] { "hi".charAt(-1) } caught: StringIndexOutOfBoundsException = java.lang.StringIndexOutOfBoundsException: String index out of range: -1 - object Canceled extends Serializable
Companion object to class
Canceledthat provides, in addition to the extractor and factory method provided by the compiler given its companion is a case class, a second factory method that produces aCanceledoutcome given a string message. - object Checkpoints extends Checkpoints
Companion object that facilitates the importing the members of trait
Checkpointsas an alternative to mixing it in.Companion object that facilitates the importing the members of trait
Checkpointsas an alternative to mixing it in. One use case is to importCheckpointsso you can use it in the Scala interpreter. - object CompleteLastly extends CompleteLastly
Companion object that facilitates the importing of
CompleteLastlymembers as an alternative to mixing it in. - object ConfigMap extends Serializable
Companion object to class
ConfigMapcontaining factory methods. - object DiagrammedExpr
DiagrammedExprcompanion object that provides factory methods to create different sub types ofDiagrammedExprDiagrammedExprcompanion object that provides factory methods to create different sub types ofDiagrammedExprDiagrammedExpris used by code generated fromDiagrammedAssertionsMacro, it needs to be public so that the generated code can be compiled. It is expected that ScalaTest users would ever need to useDiagrammedExprdirectly. - object EitherValues extends EitherValues
Companion object that facilitates the importing of
ValueEithermembers as an alternative to mixing it in.Companion object that facilitates the importing of
ValueEithermembers as an alternative to mixing it in. One use case is to importEitherValues's members so you can useleft.valueandright.valueonEitherin the Scala interpreter:$ scala -cp scalatest-1.7.jar Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest._ import org.scalatest._ scala> import matchers.Matchers._ import matchers.Matchers._ scala> import EitherValues._ import EitherValues._ scala> val e: Either[String, Int] = Left("Muchas problemas") e: Either[String,Int] = Left(Muchas problemas) scala> e.left.value should be ("Muchas problemas") scala> e.right.value should be < 9 org.scalatest.TestFailedException: The Either on which rightValue was invoked was not defined. at org.scalatest.EitherValues$RightValuable.value(EitherValues.scala:148) at .<init>(<console>:18) ... - object Exceptional extends Serializable
Companion object to class
Exceptionalthat provides a factory method and an extractor that enables patterns that match bothFailedandCanceledoutcomes and extracts the contained exception and a factory method. - object Failed extends Serializable
Companion object for
Failedoffering several factory methods. - object FailedStatus extends Status with Serializable
Singleton status that represents an already completed run with at least one failed test or aborted suite.
Singleton status that represents an already completed run with at least one failed test or aborted suite.
Note: the difference between this
FailedStatusobject and the similarly namedFailedclass is that aFailedinstance indicates one test failed, whereas thisFailedStatusobject indicates either one or more tests failed and/or one or more suites aborted during a run. Both are used as the result type ofSuitelifecycle methods, butFailedis a possible result ofwithFixture, whereasFailedStatusis a possible result ofrun,runNestedSuites,runTests, orrunTest. In short,Failedis always just about one test, whereasFailedStatuscould be about something larger: multiple tests or an entire suite. - object Filter extends Serializable
Companion object to
Filteroffering a defaultFilterand a factory method forFilters. - object FutureOutcome
Companion object to
FutureOutcomesthat contains factory methods for creating already-completedFutureOutcomes. - object Inside extends Inside
Companion object that facilitates the importing of the
insideconstruct as an alternative to mixing it in.Companion object that facilitates the importing of the
insideconstruct as an alternative to mixing it in. One use case is to import theinsideconstruct so you can use it in the Scala interpreter:$ scala -cp scalatest-1.8.jar Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest._ import org.scalatest._ scala> import matchers.Matchers._ import matchers.Matchers._ scala> import Inside._ import Inside._ scala> inside (List(1, 2, 3)) { case List(x, y, z) => | y should equal (2) | } scala> inside (List(1, 2, 3)) { case List(x, y, z) => | x should equal (2) | } org.scalatest.TestFailedException: 1 did not equal 2, inside List(1, 2, 3) at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150) at org.scalatest.matchers.Matchers$.newTestFailedException(Matchers.scala:2331) at org.scalatest.matchers.Matchers$ShouldMethodHelper$.shouldMatcher(Matchers.scala:873) ... - object Inspectors extends Inspectors
Companion object that facilitates the importing of
Inspectorsmembers as an alternative to mixing it in.Companion object that facilitates the importing of
Inspectorsmembers as an alternative to mixing it in. One use case is to importInspectors's members so you can use them in the Scala interpreter. - object LoneElement extends LoneElement
Companion object that facilitates the importing of
LoneElementmembers as an alternative to mixing it in.Companion object that facilitates the importing of
LoneElementmembers as an alternative to mixing it in. One use case is to importLoneElement's members so you can useloneElementin the Scala interpreter. - object NonImplicitAssertions extends NonImplicitAssertions
Companion object that facilitates the importing of the members of trait
Assertionswithout importing the implicit conversions it provides by default.Companion object that facilitates the importing of the members of trait
Assertionswithout importing the implicit conversions it provides by default. One use case for this object is to import the non-implicitAssertionsmembers so you can use them in the Scala interpreter along with another library whose implicits conflict with those provided byAssertions:$ scala -cp scalatest-1.7.jar Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest._ import org.scalatest._ scala> import NonImplicitAssertions._ import NonImplicitAssertions._ scala> assert(1 + 1 === 2) <console>:14: error: value === is not a member of Int assert(1 + 1 === 2) ^ scala> assert(1 + 1 == 2) scala> expect(2) { 1 + 1 } scala> expect(2) { 1 + 1 + 1 } org.scalatest.TestFailedException: Expected 2, but got 3 at org.scalatest.Assertions$class.newAssertionFailedException(Assertions.scala:318) at org.scalatest.NonImplicitAssertions$.newAssertionFailedException(NonImplicitAssertions.scala:73) ... scala> intercept[IndexOutOfBoundsException] { "hi".charAt(-1) } res3: IndexOutOfBoundsException = java.lang.StringIndexOutOfBoundsException: String index out of range: -1 - object OptionValues extends OptionValues
Companion object that facilitates the importing of
OptionValuesmembers as an alternative to mixing it in.Companion object that facilitates the importing of
OptionValuesmembers as an alternative to mixing it in. One use case is to importOptionValues's members so you can usevalueon option in the Scala interpreter:$ scala -cp scalatest-1.7.jar Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest._ import org.scalatest._ scala> import matchers.Matchers._ import matchers.Matchers._ scala> import OptionValues._ import OptionValues._ scala> val opt1: Option[Int] = Some(1) opt1: Option[Int] = Some(1) scala> val opt2: Option[Int] = None opt2: Option[Int] = None scala> opt1.value should be < 10 scala> opt2.value should be < 10 org.scalatest.TestFailedException: The Option on which value was invoked was not defined. at org.scalatest.OptionValues$Valuable.value(OptionValues.scala:68) at .<init>(<console>:18) ...
- object Outcome extends Serializable
Companion object for trait
Outcomethat contains an implicit method that enables collections ofOutcomes to be flattened into a collections of contained exceptions. - object OutcomeOf extends OutcomeOf
Companion object that facilitates the importing of
OutcomeOf's method as an alternative to mixing it in.Companion object that facilitates the importing of
OutcomeOf's method as an alternative to mixing it in. One use case is to importOutcomeOf's method so you can use it in the Scala interpreter. - object PartialFunctionValues extends PartialFunctionValues
Companion object that facilitates the importing of
PartialFunctionValuesmembers as an alternative to mixing it in.Companion object that facilitates the importing of
PartialFunctionValuesmembers as an alternative to mixing it in. One use case is to importPartialFunctionValues's members so you can use thevalueAtmethod onPartialFunctionin the Scala interpreter:$ scala -cp scalatest-1.7.jar Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest._ import org.scalatest._ scala> import matchers.Matchers._ import matchers.Matchers._ scala> import PartialFunctionValues._ import PartialFunctionValues._ scala> val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4) pf: PartialFunction[String,Int] = Map(I -> 1, II -> 2, III -> 3, IV -> 4) scala> pf("IV") should equal (4) scala> pf("V") should equal (5) java.util.NoSuchElementException: key not found: V at scala.collection.MapLike$class.default(MapLike.scala:224) at scala.collection.immutable.Map$Map4.default(Map.scala:167) ... - object Payloads extends Payloads
Companion object that facilitates the importing of
Payloadsmembers as an alternative to mixing it in.Companion object that facilitates the importing of
Payloadsmembers as an alternative to mixing it in. One use case is to importPayloadsmembers so you can use them in the Scala interpreter. - object Pending extends Outcome with Product with Serializable
Outcome for a test that was pending, which contains an optional string giving more information on what exactly is needed for the test to become non-pending.
- object PrivateMethodTester extends PrivateMethodTester
Companion object that facilitates the importing of
PrivateMethodTestermembers as an alternative to mixing it in.Companion object that facilitates the importing of
PrivateMethodTestermembers as an alternative to mixing it in. One use case is to importPrivateMethodTestermembers so you can use them in the Scala interpreter:$scala -classpath scalatest.jar Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.5.0_16). Type in expressions to have them evaluated. Type :help for more information. scala> import org.scalatest.PrivateMethodTester._ import org.scalatest.PrivateMethodTester._ scala> class Example { | private def addSesame(prefix: String) = prefix + " sesame" | } defined class Example scala> val example = new Example example: Example = Example@d8b6fe scala> val addSesame = PrivateMethod[String]('addSesame) addSesame: org.scalatest.PrivateMethodTester.PrivateMethod[String] = org.scalatest.PrivateMethodTester$PrivateMethod@5cdf95 scala> example invokePrivate addSesame("open") res0: String = open sesame@author Bill Venners
- object RecoverMethods extends RecoverMethods
Companion object that facilitates the importing of
RecoverMethods's method as an alternative to mixing it in.Companion object that facilitates the importing of
RecoverMethods's method as an alternative to mixing it in. One use case is to importRecoverMethods's method so you can use it in the Scala interpreter. - object Retries extends Retries
Companion object to trait
Retriesthat enables its members to be imported as an alternative to mixing them in. - object Sequential extends Serializable
Companion object to class
Sequentialthat offers anapplyfactory method for creating aSequentialinstance.Companion object to class
Sequentialthat offers anapplyfactory method for creating aSequentialinstance.One use case for this object is to run multiple specification-style suites in the Scala interpreter, like this:
scala> Sequential(new MyFirstSuite, new MyNextSuite).execute()
- object Stepwise extends Serializable
Companion object to class
Stepwisethat offers anapplyfactory method for creating aStepwiseinstance.Companion object to class
Stepwisethat offers anapplyfactory method for creating aStepwiseinstance.One use case for this object is to run multiple specification-style suites in the Scala interpreter, like this:
scala> Stepwise(new MyFirstSuite, new MyNextSuite).execute()
- object Stopper
Companion object to Stopper that holds a factory method that produces a new
StopperwhosestopRequestedmethod returns false until after itsrequestStophas been invoked. - object StreamlinedXml extends StreamlinedXml
Companion object that facilitates the importing of
StreamlinedXmlmembers as an alternative to mixing it the trait.Companion object that facilitates the importing of
StreamlinedXmlmembers as an alternative to mixing it the trait. One use case is to importStreamlinedXmlmembers so you can use them in the Scala interpreter. - object StreamlinedXmlEquality extends StreamlinedXmlEquality
Companion object that facilitates the importing of
StreamlinedXmlEqualitymembers as an alternative to mixing it the trait.Companion object that facilitates the importing of
StreamlinedXmlEqualitymembers as an alternative to mixing it the trait. One use case is to importStreamlinedXmlEqualitymembers so you can use them in the Scala interpreter. - object StreamlinedXmlNormMethods extends StreamlinedXmlNormMethods
Companion object that facilitates the importing of
StreamlinedXmlNormMethodsmembers as an alternative to mixing it the trait.Companion object that facilitates the importing of
StreamlinedXmlNormMethodsmembers as an alternative to mixing it the trait. One use case is to importStreamlinedXmlNormMethods's implicit so you can use it in the Scala interpreter. - object Succeeded extends Outcome with scalatest.compatible.Assertion with Product with Serializable
Outcome for a test that succeeded.
Outcome for a test that succeeded.
Note: the difference between this
Succeededobject and the similarly namedSucceededStatusobject is that this object indicates one test (or assertion) succeeded, whereas theSucceededStatusobject indicates the absence of any failed tests or aborted suites during a run. Both are used as the result type ofSuitelifecycle methods, butSucceededis a possible result ofwithFixture, whereasSucceededStatusis a possible result ofrun,runNestedSuites,runTests, orrunTest. In short,Succeededis always just about one test (or assertion), whereasSucceededStatuscould be about something larger: multiple tests or an entire suite. - object SucceededStatus extends Status with Serializable
Singleton status that represents an already completed run with no tests failed and no suites aborted.
Singleton status that represents an already completed run with no tests failed and no suites aborted.
Note: the difference between this
SucceededStatusobject and the similarly namedSucceededobject is that theSucceededobject indicates one test succeeded, whereas thisSucceededStatusobject indicates the absence of any failed tests or aborted suites during a run. Both are used as the result type ofSuitelifecycle methods, butSucceededis a possible result ofwithFixture, whereasSucceededStatusis a possible result ofrun,runNestedSuites,runTests, orrunTest. In short,Succeededis always just about one test, whereasSucceededStatuscould be about something larger: multiple tests or an entire suite. - object Suites extends Serializable
Companion object to class
Suitesthat offers anapplyfactory method for creating aSuitesinstance.Companion object to class
Suitesthat offers anapplyfactory method for creating aSuitesinstance.One use case for this object is to run multiple specification-style suites in the Scala interpreter, like this:
scala> Suites(new MyFirstSuite, new MyNextSuite).execute()
- object Tag
Companion object for
Tag, which offers a factory method. - object Tracker
Companion object to
Trackeroffering a defaultTracker. - object TryValues extends TryValues
Companion object that facilitates the importing of
TryValuesmembers as an alternative to mixing it in.Companion object that facilitates the importing of
TryValuesmembers as an alternative to mixing it in. One use case is to importTryValues's members so you can usesuccessandfailureonTryin the Scala interpreter. - object run
Singleton object providing an
applymethod for the ScalaTest shell and amainmethod for ScalaTest's simple runner.Singleton object providing an
applymethod for the ScalaTest shell and amainmethod for ScalaTest's simple runner.The
applymethod can be used in the ScalaTest Shell (its DSL for the Scala interpreter) in this way:scala> import org.scalatest._ import org.scalatest._ scala> class ArithmeticSuite extends FunSuite with Matchers { | test("addition works") { | 1 + 1 should equal (2) | } | ignore("subtraction works") { | 1 - 1 should equal (0) | } | test("multiplication works") { | 1 * 1 should equal (2) | } | test("division works") (pending) | } defined class ArithmeticSuite scala> run(new ArithmeticSuite) ArithmeticSuite: - addition works - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** 1 did not equal 2 (
:16) - division works (pending)The last command is calling the
applymethod on therunsingleton object. In other words, you could alternatively call it this way:scala> run.apply(new ArithmeticSuite) ArithmeticSuite: - addition works - subtraction works !!! IGNORED !!! - multiplication works *** FAILED *** 1 did not equal 2 (
:16) - division works (pending)The
runsingleton object also serves a different purpose. Itsmainmethod allows users to "run"runas a Scala application. ScalaTest'sRunnerapplication is very powerful, but doesn't provide the simplest out-of-box experience for people trying ScalaTest for the first time. For example, to run anExampleSpecin the unnamed package from the directory where it is compiled withRunner's standard out reporter requires this command:$ scala -cp scalatest-RELEASE.jar org.scalatest.tools.Runner -R . -o -s ExampleSpecRunning it with the
runapplication is simpler:$ scala -cp scalatest-RELEASE.jar org.scalatest.run ExampleSpec
Deprecated Value Members
- val DiagrammedAssertions: Diagrams.type
The name
org.scalatest.DiagrammedAssertionshas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.diagrams.Diagrams, instead.The name
org.scalatest.DiagrammedAssertionshas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.diagrams.Diagrams, instead.This type has been renamed to suport future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.DiagrammedAssertions object has been moved and renamed. Please use org.scalatest.diagrams.Diagrams instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- val Matchers: scalatest.matchers.should.Matchers.type
The name
org.scalatest.Matchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.should.Matchers, instead.The name
org.scalatest.Matchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.should.Matchers, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.Matchers trait has been moved and renamed. Please use org.scalatest.matchers.should.Matchers instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x
- val MustMatchers: scalatest.matchers.must.Matchers.type
The name
org.scalatest.MustMatchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.must.Matchers, instead.The name
org.scalatest.MustMatchershas been deprecated and will be removed in a future version of ScalaTest. Please use its new name,org.scalatest.matchers.must.Matchers, instead.This type has been renamed to support future modularization of ScalaTest.
This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x.
- Annotations
- @deprecated
- Deprecated
(Since version 3.1.0) The org.scalatest.MustMatchers trait has been moved and renamed. Please use org.scalatest.matchers.must.Matchers instead. This can be rewritten automatically with autofix: https://github.com/scalatest/autofix/tree/master/3.1.x