ScalaTest User Guide

Writing your first test

Using assertions

Tagging your tests

Running your tests

Sharing fixtures

Sharing tests

Using matchers

Testing with mock objects

Tests as specifications

Property-based testing

Other goodies

Philosophy and design

Selecting a style

Writing your first test

1. In ScalaTest, you define tests inside classes that extend a style trait such as FlatSpec:

import org.scalatest.FlatSpec

class FirstSpec extends FlatSpec { // tests go here... }

2. Each test in a FlatSpec is composed of a sentence that specifies a bit of required behavior and a block of code that tests it. The sentence needs a subject, such as "A Stack"; a verb, either should, must, or can; and the rest of the sentence. Here's an example:

"A Stack" should "pop values in last-in-first-out order"

If you have multiple tests about the same subject, you can use it to refer to the previous subject:

it should "throw NoSuchElementException if an empty stack is popped"

After the sentence you put the word in followed by the body of the test in curly braces. Here's a complete example:

import org.scalatest.FlatSpec
import scala.collection.mutable.Stack

class StackSpec extends FlatSpec {
"A Stack" should "pop values in last-in-first-out order" in { val stack = new Stack[Int] stack.push(1) stack.push(2) assert(stack.pop() === 2) assert(stack.pop() === 1) }
it should "throw NoSuchElementException if an empty stack is popped" in { val emptyStack = new Stack[String] intercept[NoSuchElementException] { emptyStack.pop() } } }

3. Place this in a file called StackSpec.scala and compile it with:

$ scalac -cp scalatest-1.7.2.jar StackSpec.scala

4. You can run it from the command line by invoking ScalaTest's Runner application:

$ scala -cp scalatest.jar org.scalatest.tools.Runner -p . -o -s StackSpec
Run starting. Expected test count is: 2
StackSpec:
A Stack 
- should pop values in last-in-first-out order
- should throw NoSuchElementException if an empty stack is popped
Run completed in 96 milliseconds.
Total number of tests run: 2
Suites: completed 1, aborted 0
Tests: succeeded 2, failed 0, ignored 0, pending 0
All tests passed.

5. Or you can run it from the Scala interpreter using the ScalaTest shell:

$ scala -cp scalatest-1.7.2.jar

scala> import org.scalatest._
import org.scalatest._

scala> run(new StackSpec)
StackSpec:
A Stack 
- should pop values in last-in-first-out order
- should throw NoSuchElementException if an empty stack is popped

Next, learn about using assertions.

ScalaTest is brought to you by Bill Venners, with contributions from several other folks. It is sponsored by Artima, Inc.
ScalaTest is free, open-source software released under the Apache 2.0 license.

Copyright © 2009-2012 Artima, Inc. All Rights Reserved.

artima