在ScalaTest中的FunSuite中拥有自己的测试方法

时间:2017-10-05 14:21:28

标签: scalatest

目前,FunSuite执行名为test的方法作为测试。

我想写一个包裹mytest的函数test。如何让FunSuite将mytest识别为要执行的测试?

1 个答案:

答案 0 :(得分:2)

FunSuite.test ScalaTest FunSpecLike特征中定义。它具有以下定义:

protected def test(testName: String, testTags: Tag*)(testFun: => Any /* Assertion */)(implicit pos: source.Position): Unit = {
  // SKIP-SCALATESTJS-START
  val stackDepth = 4
  val stackDepthAdjustment = -2
  // SKIP-SCALATESTJS-END
  //SCALATESTJS-ONLY val stackDepth = 6
  //SCALATESTJS-ONLY val stackDepthAdjustment = -6
  engine.registerTest(testName, Transformer(testFun _), Resources.testCannotAppearInsideAnotherTest, "FunSuiteLike.scala", "test", stackDepth, stackDepthAdjustment, None, None, Some(pos), None, testTags: _*)
}

最重要的一点是,它通过engine.registerTest(...)调用注册其有效负载以供执行。理论上,您可以通过执行以下操作来识别mytest

class MyFunSuite
extends FunSuite {

  // User-defined test named mytest
  protected def mytest(testName: String, testTags: Tag*)(testFun: => Any /* Assertion */)(implicit pos: source.Position) = {
    test(testName, testTags: _*)(testFun)(pos)
  }
}

然后您将按如下方式使用它:

class MyTests
extends MyFunSuite {

  mytest("This is one of my own tests.") {
    // ...
  }

  mytest("This is another test.") {
    // ...
  }

  // ...
}

那就是说,这里没有附加价值(现在),你需要付出很多努力才能复制现有的功能。但是,您可以清楚地修改mytest的定义,以执行您可能需要的一些样板操作。