如何使用JUnitRunner使JUnit4生命周期回调在ScalaTest中工作?

时间:2015-10-03 02:09:51

标签: scala scalatest

根据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一起使用?如果有可能,该怎么做?

2 个答案:

答案 0 :(得分:1)

答案 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")
  }
}