ScalaTest/Scalactic 3.2.0 (for Scala 2.10, 2.11, 2.12, and 2.13; on the JVM, JavaScript, native, and Dotty) includes the enhancements and bug fixes listed below. No source code using ScalaTest/Scalactic 3.1.2 should break, so long as you fix all deprecation warnings prior to upgrading, but this release is not binary compatible with 3.1.2.
For information on how to include ScalaTest in your project, see the install page. For information on how to use Scalactic in your production code, see its install page.
The main change in ScalaTest 3.2.0 is carrying out the modularization that we prepared for in 3.0.8 and 3.1.0. As a result, many deprecated names have been removed, because the deprecations would cross module boundaries. Other than these deprecation expirations, the actual modularization, and some changes to support more recent versions of Dotty and Scala.js, ScalaTest 3.2.0 is identical with ScalaTest 3.1.2.
Modularization required that we rename many traits, classes, and objects so that all the members of each package would belong to a single module. In the monolithic ScalaTest artifact, which everyone is currently using in their build, the old names were deprecated in the 3.0.8 and 3.1.0 releases. To upgrade to 3.2.0, we recommend you first upgrade to 3.1.0 (3.1.1 or 3.1.2 is also fine). To upgrade to 3.1.0, we recommend that you first upgrade to 3.0.8 and clear all deprecation warnings. We offer a ScalaFix tool to help you fix the 3.0.8 deprecation warnings. Then, just change the version to 3.1.0. Your project should compile as before, but you'll get deprecation warnings about the name changes made in 3.1.0. To help you with all those renames, we provide a ScalaFix tool to help you fix the 3.1.0 deprecation warnings. Once you've cleared all deprecation warnings in 3.1.0 (or 3.1.1 or 3.1.2, if you are already using either of those releases), you can just change the ScalaTest and Scalactic versions in your build to 3.2.0 and recompile. Everything should work as before, there should be no source-breaking changes in 3.2.0 compared to 3.1.0 so long a you clear deprecation warning prior to upgrading to 3.2.0 and do a full recompile.
If you upgrade to 3.2.0 by changing 3.1.2 to 3.2.0 in your build, everything should work exactly the same as before after a recompile, provided you remove all deprecation warnings under 3.1.2 prior to upgrading. In 3.2.0, we are releasing the same artifacts as before, and they contain the same software, even though behind the scenes they are composed of more artifacts in 3.2.0. In 3.1.0, we moved third-party dependencies of ScalaTest to their own artifacts, so we could evolve them independently to match both ScalaTest and the third-party dependencies. This organization of artifacts is shown in the following diagram:
In 3.2.0, we modularized ScalaTest further into the organization shown in the following diagram:
As the diagram illustrates, the scalatest
artifact is now composed of more sub-artifacts than in 3.1.0. Nevertheless, through
its transitive dependencies, it still contains all the same software as it did in 3.1.0, except for the
deprecation expirations described below. As an example, this is how you add full ScalaTest 3.2.0 to
an sbt build:
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.0" % "test"
Alternatively, as of 3.2.0 you can depend on a smaller subset of full ScalaTest, which can help you achieve consistent style
choices among team members, because only the modules you add to your build will be available to the project. First, each ScalaTest
style now has its own artifact. For example, the FunSuite
style is distributed in the scalatest-funsuite
artifact. Here's how you would add this module to an sbt build:
libraryDependencies += "org.scalatest" %% "scalatest-funsuite" % "3.2.0" % "test"
This dependency would enable you to use just ScalaTest's FunSuite style in your project, with ScalaTest's default assertions.
You would not be able to use any other ScalaTest style, matchers, or diagrammed assertions, unless you added more dependencies.
For example, if you wanted to use the FunSuite
style with must matchers, you could add the following to an sbt build:
libraryDependencies ++= Seq( "org.scalatest" %% "scalatest-funsuite" % "3.2.0" % "test", "org.scalatest" %% "scalatest-mustmatchers" % "3.2.0" % "test" )
The style trait modules are given in the following table.
ScalaTest testing style modules | |
---|---|
Testing style | artifact name |
FunSuite |
scalatest-funsuite |
FlatSpec |
scalatest-flatspec |
FunSpec |
scalatest-funspec |
WordSpec |
scalatest-wordspec |
FreeSpec |
scalatest-freespec |
PropSpec |
scalatest-propspec |
FeatureSpec |
scalatest-featurespec |
RefSpec |
scalatest-refspec |
The assertion modules are given in the following table.
ScalaTest assertion style modules | |
---|---|
Assertion style | artifact name |
Diagrams |
scalatest-diagrams |
should.Matchers |
scalatest-shouldmatchers |
must.Matchers |
scalatest-mustmatchers |
ScalaTest 3.2.0 contains no new deprecations.
FunSuite
style, to package org.scalatest.funsuite
.
The old names still worked in 3.1.0, but gave a deprecation warning. These old names have now been removed in 3.2.0.
The reason we renamed and deprecated ScalaTest's style traits and classes in 3.1.0, and removed the old, deprecated names in 3.2.0,
was to enable modularization that we have implemented in 3.2.0. Modularization must be done on package boundaries, and prior to
3.1.0, ScalaTest's different style
traits and classes resided in common packages such as org.scalatest
, org.scalatest.fixture
, and
org.scalatest.path
. Because we wanted to modularize along style boundaries, we needed to move the classes and traits
for each style into its own package. For example, we moved all traits related to the FunSuite
style to package
org.scalatest.funsuite
.
Note that we also slightly renamed some of the traits and classes when we moved them in 3.1.0. We prefixed “Any
”
to the names of the main style traits and classes whose test bodies have a result type of Any
. For example,
org.scalatest.FunSuite
was renamed to org.scalatest.funsuite.AnyFunSuite
in 3.1.0.
The Any
styles are backwards compatible with ScalaTest's original style traits, which allow you to use assertions
from any other testing library no matter the result type of those assertions. The reason for this name change is that in a future
version of ScalaTest we plan to add a new set of style traits and classes with the original names, such as FunSuite
(but
in the org.scalatest.funsuite
package), whose test bodies will have a
result type of Assertion
.
In addition, we prefixed “Fixture
” to the simple names of the traits and classes in package
org.scalatest.fixture
package.
For example, org.scalatest.fixture.FunSuite
was renamed to org.scalatest.funsuite.FixtureAnyFunSuite
.
Similarly, we prefixed “Path
” to the simple names of the traits and classes in package
org.scalatest.path
.
For example, org.scalatest.path.FunSpec
was renamed to org.scalatest.funsuite.PathAnyFunSpec
.
Here are the details:
FunSuite style (scalatest-funsuite module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.FunSuite |
org.scalatest.funsuite.AnyFunSuite |
org.scalatest.FunSuiteLike |
org.scalatest.funsuite.AnyFunSuiteLike |
org.scalatest.AsyncFunSuite |
org.scalatest.funsuite.AsyncFunSuite |
org.scalatest.AsyncFunSuiteLike |
org.scalatest.funsuite.AsyncFunSuiteLike |
org.scalatest.fixture.FunSuite |
org.scalatest.funsuite.FixtureAnyFunSuite |
org.scalatest.fixture.FunSuiteLike |
org.scalatest.funsuite.FixtureAnyFunSuiteLike |
org.scalatest.fixture.AsyncFunSuite |
org.scalatest.funsuite.FixtureAsyncFunSuite |
org.scalatest.fixture.AsyncFunSuiteLike |
org.scalatest.funsuite.FixtureAsyncFunSuiteLike |
FlatSpec style (scalatest-flatspec module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.FlatSpec |
org.scalatest.flatspec.AnyFlatSpec |
org.scalatest.FlatSpecLike |
org.scalatest.flatspec.AnyFlatSpecLike |
org.scalatest.AsyncFlatSpec |
org.scalatest.flatspec.AsyncFlatSpec |
org.scalatest.AsyncFlatSpecLike |
org.scalatest.flatspec.AsyncFlatSpecLike |
org.scalatest.fixture.FlatSpec |
org.scalatest.flatspec.FixtureAnyFlatSpec |
org.scalatest.fixture.FlatSpecLike |
org.scalatest.flatspec.FixtureAnyFlatSpecLike |
org.scalatest.fixture.AsyncFlatSpec |
org.scalatest.flatspec.FixtureAsyncFlatSpec |
org.scalatest.fixture.AsyncFlatSpecLike |
org.scalatest.flatspec.FixtureAsyncFlatSpecLike |
FunSpec style (scalatest-funspec module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.FunSpec |
org.scalatest.funspec.AnyFunSpec |
org.scalatest.FunSpecLike |
org.scalatest.funspec.AnyFunSpecLike |
org.scalatest.AsyncFunSpec |
org.scalatest.funspec.AsyncFunSpec |
org.scalatest.AsyncFunSpecLike |
org.scalatest.funspec.AsyncFunSpecLike |
org.scalatest.fixture.FunSpec |
org.scalatest.funspec.FixtureAnyFunSpec |
org.scalatest.fixture.FunSpecLike |
org.scalatest.funspec.FixtureAnyFunSpecLike |
org.scalatest.fixture.AsyncFunSpec |
org.scalatest.funspec.FixtureAsyncFunSpec |
org.scalatest.fixture.AsyncFunSpecLike |
org.scalatest.funspec.FixtureAsyncFunSpecLike |
org.scalatest.path.FunSpec |
org.scalatest.funspec.PathAnyFunSpec |
org.scalatest.path.FunSpecLike |
org.scalatest.funspec.PathAnyFunSpecLike |
WordSpec style (scalatest-wordspec module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.WordSpec |
org.scalatest.wordspec.AnyWordSpec |
org.scalatest.WordSpecLike |
org.scalatest.wordspec.AnyWordSpecLike |
org.scalatest.AsyncWordSpec |
org.scalatest.wordspec.AsyncWordSpec |
org.scalatest.AsyncWordSpecLike |
org.scalatest.wordspec.AsyncWordSpecLike |
org.scalatest.fixture.WordSpec |
org.scalatest.wordspec.FixtureAnyWordSpec |
org.scalatest.fixture.WordSpecLike |
org.scalatest.wordspec.FixtureAnyWordSpecLike |
org.scalatest.fixture.AsyncWordSpec |
org.scalatest.wordspec.FixtureAsyncWordSpec |
org.scalatest.fixture.AsyncWordSpecLike |
org.scalatest.wordspec.FixtureAsyncWordSpecLike |
FreeSpec style (scalatest-freespec module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.FreeSpec |
org.scalatest.freespec.AnyFreeSpec |
org.scalatest.FreeSpecLike |
org.scalatest.freespec.AnyFreeSpecLike |
org.scalatest.AsyncFreeSpec |
org.scalatest.freespec.AsyncFreeSpec |
org.scalatest.AsyncFreeSpecLike |
org.scalatest.freespec.AsyncFreeSpecLike |
org.scalatest.fixture.FreeSpec |
org.scalatest.freespec.FixtureAnyFreeSpec |
org.scalatest.fixture.FreeSpecLike |
org.scalatest.freespec.FixtureAnyFreeSpecLike |
org.scalatest.fixture.AsyncFreeSpec |
org.scalatest.freespec.FixtureAsyncFreeSpec |
org.scalatest.fixture.AsyncFreeSpecLike |
org.scalatest.freespec.FixtureAsyncFreeSpecLike |
org.scalatest.path.FreeSpec |
org.scalatest.freespec.PathAnyFreeSpec |
org.scalatest.path.FreeSpecLike |
org.scalatest.freespec.PathAnyFreeSpecLike |
PropSpec style (scalatest-propspec module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.PropSpec |
org.scalatest.propspec.AnyPropSpec |
org.scalatest.PropSpecLike |
org.scalatest.propspec.AnyPropSpecLike |
org.scalatest.AsyncPropSpec |
org.scalatest.propspec.AsyncPropSpec |
org.scalatest.AsyncPropSpecLike |
org.scalatest.propspec.AsyncPropSpecLike |
org.scalatest.fixture.PropSpec |
org.scalatest.propspec.FixtureAnyPropSpec |
org.scalatest.fixture.PropSpecLike |
org.scalatest.propspec.FixtureAnyPropSpecLike |
org.scalatest.fixture.AsyncPropSpec |
org.scalatest.propspec.FixtureAsyncPropSpec |
org.scalatest.fixture.AsyncPropSpecLike |
org.scalatest.propspec.FixtureAsyncPropSpecLike |
FeatureSpec style (scalatest-featurespec module) | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.FeatureSpec |
org.scalatest.featurespec.AnyFeatureSpec |
org.scalatest.FeatureSpecLike |
org.scalatest.featurespec.AnyFeatureSpecLike |
org.scalatest.AsyncFeatureSpec |
org.scalatest.featurespec.AsyncFeatureSpec |
org.scalatest.AsyncFeatureSpecLike |
org.scalatest.featurespec.AsyncFeatureSpecLike |
org.scalatest.fixture.FeatureSpec |
org.scalatest.featurespec.FixtureAnyFeatureSpec |
org.scalatest.fixture.FeatureSpecLike |
org.scalatest.featurespec.FixtureAnyFeatureSpecLike |
org.scalatest.fixture.AsyncFeatureSpec |
org.scalatest.featurespec.FixtureAsyncFeatureSpec |
org.scalatest.fixture.AsyncFeatureSpecLike |
org.scalatest.featurespec.FixtureAsyncFeatureSpecLike |
org.scalatest.fixture
package that had been deprecated and renamed in 3.1.0.
Here are the details:
top-level fixture traits
| |
---|---|
removed in 3.2.0 | new name |
org.scalatest.fixture.Suite |
org.scalatest.FixtureSuite |
org.scalatest.fixture.TestSuite |
org.scalatest.FixtureTestSuite |
org.scalatest.fixture.AsyncTestSuite |
org.scalatest.FixtureAsyncTestSuite |
org.scalatest.fixture.TestRegistration |
org.scalatest.FixtureTestRegistration |
org.scalatest.fixture.AsyncTestRegistration |
org.scalatest.FixtureAsyncTestRegistration |
Assertion style | |
---|---|
removed in 3.2.0 | new name |
org.scalatest.Matchers |
org.scalatest.matchers.should.Matchers |
org.scalatest.MustMatchers |
org.scalatest.matchers.must.Matchers |
org.scalatest.DiagrammedAssertions |
org.scalatest.diagrams.Diagrams |
org.scalatest.words
members that were only needed by matchers to
org.scalatest.matchers.dsl
in 3.1.0. We moved the remaining members of words
to org.scalatest.verbs
in 3.1.0, and deprecated the old names under words
. In 3.2.0, we have removed the words
package, which only
contained deprecated names as of 3.1.0.
Scalactic 3.2.0 contains no new deprecations.
Visit ScalaTest Release Notes for links to the release notes of all previous versions, or step back in time by visiting the release notes for the previous version.
ScalaTest is brought to you by Bill Venners and Artima.
ScalaTest is free, open-source software
released under the Apache
2.0 license.
If your company loves ScalaTest, please consider sponsoring the project.
Copyright © 2009-2024 Artima, Inc. All Rights Reserved.