目前,FunSuite执行名为test
的方法作为测试。
我想写一个包裹mytest
的函数test
。如何让FunSuite将mytest
识别为要执行的测试?
答案 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
的定义,以执行您可能需要的一些样板操作。