我在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方法处理。
答案 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
}