Installation
You'll need to install the following dependencies to test your programs against cats.effect.IO
SBT (1.9.0+)
Newer versions of SBT have weaver
automatically integrated.
libraryDependencies += "org.typelevel" %% "weaver-cats" % "0.0-70b2e5f-SNAPSHOT" % Test
SBT (older versions)
Internally, SBT has a hardcoded list of test frameworks it integrates with. weaver
must be manually added to this list.
libraryDependencies += "org.typelevel" %% "weaver-cats" % "0.0-70b2e5f-SNAPSHOT" % Test
testFrameworks += new TestFramework("weaver.framework.CatsEffect")
Mill
object test extends Tests {
def ivyDeps = Agg(
ivy"org.typelevel::weaver-cats:0.0-70b2e5f-SNAPSHOT"
)
def testFramework = "weaver.framework.CatsEffect"
}
scala-cli
//> using lib "org.typelevel::weaver-cats:0.0-70b2e5f-SNAPSHOT"
//> using testFramework "weaver.framework.CatsEffect" // this may neccessary if you have other TestFramework on your dependencies
Usage
Start with importing the following :
import weaver._
The most basic usage is to extend SimpleIOSuite
. Tests are registered imperatively, very much like in scalatest's FunSuite
or in utest
, but their bodies are "weaved" together in a single IO
that the framework executes when the build tool asks for it.
import cats.effect._
// Suites must be "objects" for them to be picked by the framework
object MySuite extends SimpleIOSuite {
val randomUUID = IO(java.util.UUID.randomUUID())
// A test for side-effecting functions
test("hello side-effects") {
for {
x <- randomUUID
y <- randomUUID
} yield expect(x != y)
}
}