ebruchez
ebruchez

Reputation: 7857

Is it possible to use the ScalaTest BDD syntax in a JUnit environment?

I would like to describe tests in BDD style e.g. with FlatSpec but keep JUnit as a test runner.

The ScalaTest Quick Start does not seem to show any example of this:

http://www.scalatest.org/getting_started_with_junit_4

I first tried naively to write tests within @Test methods, but that doesn't work and the assertion is never tested:

@Test def foobarBDDStyle {
    "The first name control" must "be valid" in {
        assert(isValid("name·1"))
    }
    // etc.
}

Is there any way to achieve this? It would be even better if regular tests can be mixed and matched with BDD-style tests.

Upvotes: 6

Views: 1354

Answers (2)

Bill Venners
Bill Venners

Reputation: 126

The way you probably want to do that is to use the @RunWith annotation, like this:

import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import org.scalatest.FlatSpec

@RunWith(classOf[JUnitRunner])
 class MySuite extends FlatSpec {
   "The first name control" must "be valid" in {
        assert(isValid("name·1"))
    }
 }

JUnit 4 will use ScalaTest's JUnitRunner to run the FlatSpec as a JUnit test suite.

Upvotes: 11

Abhinav Sarkar
Abhinav Sarkar

Reputation: 23802

You don't need to have defs and @Test annotations. Here is an example:

import org.scalatest.junit.JUnitRunner
import org.junit.runner.RunWith
import org.scalatest.FlatSpec
import org.scalatest.junit.ShouldMatchersForJUnit

@RunWith(classOf[JUnitRunner])
class SpelHelperSpec extends FlatSpec with ShouldMatchersForJUnit {

  "SpelHelper" should "register and evaluate functions " in {
    new SpelHelper()
      .registerFunctionsFromClass(classOf[Functions])
      .evalExpression(
        "#test('check')", new {}, classOf[String]) should equal ("check")
  }

  it should "not register non public methods " in {
    val spelHelper = new SpelHelper()
      .registerFunctionsFromClass(classOf[Functions])
    evaluating { spelHelper.evalExpression("#testNonPublic('check')",
      new {}, classOf[String]) } should produce [SpelEvaluationException]
  }
}

Source

Upvotes: 6

Related Questions