eed3si9n / expecty

Power assertions (as known from Groovy and Spock) for the Scala language.

Version Matrix

Expecty - Power Assertions for Scala

Expecty brings power assertions as known from Groovy and Spock to the Scala language. It is a micro library that aims to do one thing well.

License and Credits

Expecty was originally written by Peter Niederwieser, author of Spock.

Expecty is licensed under the Apache 2 license.

Setup

libraryDependencies += "com.eed3si9n.expecty" %% "expecty" % "0.12.0" % Test

Code Examples

Welcome to Scala 2.12.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_212).
Type in expressions for evaluation. Or try :help.

scala> import com.eed3si9n.expecty.Expecty.assert
import com.eed3si9n.expecty.Expecty.assert

scala> case class Person(name: String = "Fred", age: Int = 42) {
     |   def say(words: String*) = words.mkString(" ")
     | }
defined class Person

scala> val person = Person()
person: Person = Person(Fred,42)

scala> // Passing expectations

scala> assert(person.name == "Fred")

scala> assert(person.age * 2 == 84)

scala> assert(person.say("Hi", "from", "Expecty!") == "Hi from Expecty!")

scala> // Failing expectation

scala> val word1 = "ping"
word1: String = ping

scala> val word2 = "pong"
word2: String = pong

scala> assert(person.say(word1, word2) == "pong pong")
java.lang.AssertionError: assertion failed

assert(person.say(word1, word2) == "pong pong")
       |      |   |      |      |
       |      |   ping   pong   false
       |      ping pong
       Person(Fred,42)

  at com.eed3si9n.expecty.Expecty$ExpectyListener.expressionRecorded(Expecty.scala:35)
  at com.eed3si9n.expecty.RecorderRuntime.recordExpression(RecorderRuntime.scala:39)
  ... 36 elided

scala> assert(person.age * 2 == 73, "age is not right")
java.lang.AssertionError: assertion failed: age is not right

assert(person.age * 2 == 73, "age is not right")
       |      |   |   |
       |      42  84  false
       Person(Fred,42)

  at com.eed3si9n.expecty.Expecty$ExpectyListener.expressionRecorded(Expecty.scala:35)
  at com.eed3si9n.expecty.RecorderRuntime.recordExpression(RecorderRuntime.scala:39)
  ... 36 elided

Further Examples

Have a look at ExpectySpec.scala and other specs in the same directory.