ScalaTest: Less code, more clarity
import org.scalatest.FlatSpec
import org.scalatest.matchers.ShouldMatchers

class StackSpec extends FlatSpec with ShouldMatchers {

  "A Stack" should "pop values in last-in-first-out order" in {
    val stack = new Stack[Int]
    stack.push(1)
    stack.push(2)
    stack.pop() should equal (2)
    stack.pop() should equal (1)
  }

  it should "throw NoSuchElementException if an empty stack is popped" in {
    val emptyStack = new Stack[String]
    evaluating { emptyStack.pop() } should produce [NoSuchElementException]
  }
}

With ScalaTest, you can test either Scala or Java code. By integrating with popular tools such as JUnit, TestNG, Ant, Maven, and sbt, ScalaTest makes it easy to take your testing to a higher, more productive level in new or existing Scala or Java projects.

Like the Scala language on which it is built, ScalaTest is designed to grow with the demands of its users: You can easily extend and compose ScalaTest's core components to address just about any special requirements you may have. As a result, ScalaTest can scale to projects of all sizes, from an individual exploring a new idea to large teams collaborating on mission-critical software.

One way ScalaTest scales down is that despite its rich feature set, ScalaTest is easy to get into. Building on what you already know from experience with other test frameworks, you can become productive with ScalaTest in about ten minutes.

To maximize your productivity, ScalaTest uses its own extension points to support several styles of testing out of the box. You can select and mix together whatever traits best helps you solve the problem at hand. For instance, the above example uses traits FlatSpec and ShouldMatchers to select a Behavior-Driven Development (BDD) style. When you run it, you get an informal specification of the software being tested:

$ 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.

ScalaTest does not try to impose a testing philosophy on you, but rather is designed from the philosophy that the tool should get out of your way and let you work the way you find most productive. If FlatSpec doesn't meet your needs, that's not a problem. ScalaTest has other traits to choose from (or you can design your own).

If you want to continue writing tests with JUnit or TestNG, but write them in Scala, ScalaTest has traits for that. If you prefer functional to unit testing, or need to do integration or acceptance testing, ScalaTest has traits for that. And much more. In short, ScalaTest is highly customizable, providing many extension points that let you compose a testing tool best equipped to solve the particular set of problems you face today, and grow with you as your needs change over time.

Why not give it a try? Just Download ScalaTest, then visit the Quick Start page.

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