使用 PrivateMethodTester 测试柯里化方法
Test curried method using PrivateMethodTester
我正在尝试使用 curried private 方法(实际上是 function) PrivateMethodTester
但不知道如何调用它
考虑以下 curried 方法:
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)
..
- 是否可以使用
PrivateMethodTester
测试 curried 私有方法?
- 如果是,我哪里错了?
框架版本:
"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:
The private method is invoked dynamically via reflection
当我听到 反射 我想到了 Object.getClass()
,所以调用 MyObject.getClass.getDeclaredMethods.foreach(println)
方法显示为
private int example.HelloSpec$MyObject$.curriedAdder(int,int)
所以 curriedAdder(int,int)
提示了我如何调用这个柯里化方法。
我正在尝试使用 curried private 方法(实际上是 function) PrivateMethodTester
但不知道如何调用它
考虑以下 curried 方法:
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)
..
- 是否可以使用
PrivateMethodTester
测试 curried 私有方法? - 如果是,我哪里错了?
框架版本:
"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:
The private method is invoked dynamically via reflection
当我听到 反射 我想到了 Object.getClass()
,所以调用 MyObject.getClass.getDeclaredMethods.foreach(println)
方法显示为
private int example.HelloSpec$MyObject$.curriedAdder(int,int)
所以 curriedAdder(int,int)
提示了我如何调用这个柯里化方法。