我想描述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.
}
有没有办法实现这个目标?如果定期测试可以混合并与BDD式测试相匹配,那就更好了。
答案 0 :(得分: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"))
}
}
JUnit 4将使用ScalaTest的JUnitRunner将FlatSpec作为JUnit测试套件运行。
答案 1 :(得分:6)
您无需拥有def
和@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]
}
}