Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将函数转发到ScalaTest宏_Scala_Scalatest - Fatal编程技术网

将函数转发到ScalaTest宏

将函数转发到ScalaTest宏,scala,scalatest,Scala,Scalatest,我正在将一些QUnit Javascript测试转换为Scala。我所做的测试如下所示: class XXX extends MyTests { test("equals", () => { val a = new XXX(x) val b = new XXX(y) ok(a.x != b.x, "Passed!") ok(a.y != b.y, "Passed!") ok(!a.equals(b), "Passed!") ok(!b.e

我正在将一些QUnit Javascript测试转换为Scala。我所做的测试如下所示:

class XXX extends MyTests {
  test("equals", () => {
    val a = new XXX(x)
    val b = new XXX(y)
    ok(a.x != b.x, "Passed!")
    ok(a.y != b.y, "Passed!")
    ok(!a.equals(b), "Passed!")
    ok(!b.equals(a), "Passed!")
    a.copy(b)
    ok(a.x == b.x, "Passed!")
    ok(a.y == b.y, "Passed!")
    ok(a.equals(b), "Passed!")
    ok(b.equals(a), "Passed!")
  })
}
MyTests
是我从ScalaTest
FunSuite

我可以将代码中的
ok
替换为
assert
,也可以将以下内容放入
MyTests

def ok(ok: Boolean, message: String) = assert(ok, message)
第一种解决方案产生了更好的测试,因为直接使用
assert
意味着使用了
ScalaTest
增强的
assert
宏实现。第二个解决方案是更少的工作,因为我不必替换代码中的
ok


是否有某种方法可以从
FunSuite
导入不同名称的
assert
,或者将我的实现转发到ScalaTest宏,以便
ok
的行为与
assert
完全相同?

谢谢。这很好,唯一的缺点是我无法在
MyTests
中执行此操作,我需要在每个测试套件中重复此操作(导入不是继承的)。是否可以仅在
MyTests
中执行某些操作?当然,只要
def ok(…)=org.scalatest.Assertions.assertion(…)
,请参阅scalatest源代码以获取参数列表。这与问题中提到的“第二个解决方案”相同,但遗憾的是,该解决方案不起作用,因为宏不是从
ok
调用站点接收参数,而是从
ok
内部接收参数,其中参数已经是一个简单的
布尔值。您需要提供一个宏而不是一个普通的函数才能使其工作。不,在您的示例中,您正在执行
def ok(…)=scala.Predef.assert(…)
,这不是您想要的。如果转发不起作用,还可以手动内联scalatest assert的定义。我的观点是:只要看看该死的源代码,看看它是如何工作的!不,我不是
MyTests
继承自
FunSuite
,因此
assert
取自ScalaTest
Assertions
,而非
scala.Predef
。我无法手动内联ScalaTest
assert
的定义,因为宏实现是包私有的。
import org.scalatest.Assertions.{assert => ok}