是否可以在JUnit环境中使用ScalaTest BDD语法?

ebr*_*hez 6 scala scalatest

我想描述BDD风格的测试,例如使用FlatSpec,但保留JUnit作为测试运行器.

ScalaTest快速入门似乎没有显示任何此示例:

http://www.scalatest.org/getting_started_with_junit_4

我首先尝试天真地在@Test方法中编写测试,但这不起作用,断言从未测试过:

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

有没有办法实现这个目标?如果定期测试可以混合并与BDD式测试相匹配,那就更好了.

小智 11

您可能想要这样做的方法是使用@RunWith注释,如下所示:

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"))
    }
 }
Run Code Online (Sandbox Code Playgroud)

JUnit 4将使用ScalaTest的JUnitRunner将FlatSpec作为JUnit测试套件运行.


Abh*_*kar 6

您不需要defs和@Test注释.这是一个例子:

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]
  }
}
Run Code Online (Sandbox Code Playgroud)

资源