如何用功能替代品替换这种模式?

时间:2015-01-16 12:26:02

标签: scala functional-programming

我在Scala中有以下模式:

object CurrentDriver {

  private var webDriver: WebDriver = null

  def invalidate = {
    webDriver.quit()
    webDriver = null
  }

  def getWebDriver = {
    if (webDriver==null)
      webDriver = DriverFactory.buildWebDriver
    webDriver
  }
}

它没有功能,它有一个var,而invalidate方法返回一个Unit。单例对象是需要的,因为它由一些使用框架反射实例化的类引用,所以我无法将参数传递给它们。因此,他们需要调用getWebDriver来访问WebDriver的同一个实例。我需要定期(在每个测试场景之后,由多个测试函数组成)退出并重新创建一个新的WebDriver,它由invalidate方法处理。

1 个答案:

答案 0 :(得分:4)

我建议像around块一样。

 object CurrentDriver {
      def around(f: WebDriver => Unit) = {
          val webDriver: WebDriver = DriverFactory.buildWebDriver
          f(webDriver) // your tests
          webDriver.quit()
      }
 }

对于每个测试块,您可以将块与around功能组合在一起。

例如:

 def testFunc(webDriver: WebDriver) = around{ 
   assert(2 ==2)
   // do something with webDriver
}