我想测试一个 课程 私有的 方法 (实际上 功能 )使用 PrivateMethodTester
PrivateMethodTester
考虑以下内容 方法:
object MyObject { .. private def curriedAdder(augend: Int)(addend: Int): Int = augend + addend .. }
assert(9, MyObject.invokePrivate(PrivateMethod[Int]('curriedAdder)(2)(7))) .. [error] /path/to/MyObject.scala:76:80: org.scalatest.PrivateMethodTester.Invocation[Int] does not take parameters [error] assert(9, MyObject.invokePrivate(PrivateMethod[Int]('curriedAdder)(2)(7))) [error] ^ ..
当这个函数找不到的时候
assert(9, MyObject.invokePrivate(PrivateMethod[Int => Int]('curriedAdder)(2))(7)) .. [info] - my-test-name *** FAILED *** [info] java.lang.IllegalArgumentException: Can't find a private method named: curriedAdder [info] at org.scalatest.PrivateMethodTester$Invoker.invokePrivate(PrivateMethodTester.scala:247) ..
专用方法测试仪
"org.scalatest" %% "scalatest" % "3.0.3" % Test
scalaVersion := "2.11.11"
sbt.version=1.0.3
以下内容适用于scalatest 3.0.1:
val curriedAdder = PrivateMethod[Int]('curriedAdder) val actualResult = (MyObject invokePrivate curriedAdder(2, 7)) assert(9 == actualResult)
docs 以下内容:
私有方法通过反射动态调用
当我听到 反射 我想到了 Object.getClass() ,所以打电话来 MyObject.getClass.getDeclaredMethods.foreach(println) 方法显示为
Object.getClass()
MyObject.getClass.getDeclaredMethods.foreach(println)
private int example.HelloSpec$MyObject$.curriedAdder(int,int)
所以 curriedAdder(int,int) 是关于如何调用此课程方法的提示。
curriedAdder(int,int)