根据ScalaTest文档it's possible to use JUnitRunner运行测试。我的假设是,如果它与JUnitRunner一起运行,它的回调方法(即标有@Before
或@After
注释的方法也应该有效。但显然我的假设是错误的。我已经创建了简单的示例来演示它:
import org.junit.Before
import org.junit.runner.RunWith
import org.scalatest.{FunSuite, _}
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class Test extends FunSuite {
@Before
def before() = {
println("before test")
}
test("nothing") {
println("test is started")
}
}
如果您运行此示例,则会看到test is started
行,但不会看到before test
。
我知道ScalaTest生命周期回调,但问题是我需要让JUnit回调以某种方式工作。我想为Play 2.4应用程序编写一个测试,它的play.test.WithBrowser
类依赖于JUnit回调。我找到了解决此问题的方法:
var testBrowser : TestBrowser = _
before {
new WithBrowser {
override def createBrowser(): Unit = {
super.createBrowser()
testBrowser = browser
}
}.createBrowser()
}
但我相信这很难看,我怀疑有更好的方法。
所以,我的问题是,是否可以使这些JUnit生命周期回调与ScalaTest一起使用?如果有可能,该怎么做?
答案 0 :(得分:1)
您应该可以使用JUnitSuite
代替FunSuite
来执行此操作。文档在这里:
http://www.scalatest.org/getting_started_with_junit_4_in_scala http://doc.scalatest.org/2.2.4/index.html#org.scalatest.junit.JUnitSuite
答案 1 :(得分:0)
我确实像诺亚建议的那样工作。万一有人遇到Play 2.x和WithBrowser
同样的问题,我最终得到了这样的测试:
class IntegrationSpec extends WithBrowser with JUnitSuiteLike with Matchers {
@Test def workWithBrowser() {
browser.goTo("http://localhost:9000")
browser.pageSource should include("Add Person")
}
}