gpt4 book ai didi

scala - 使用 PrivateMethodTester 测试柯里化(Currying)方法

转载 作者:行者123 更新时间:2023-12-01 19:35:36 30 4
gpt4 key购买 nike

我正在尝试使用 PrivateMethodTester 测试柯里化(Currying)私有(private)方法(实际上函数),但不能'找出如何调用它

考虑以下柯里化(Currying)方法:

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 测试柯里化(Currying)私有(private)方法
  • 如果是的话,我哪里出错了?
<小时/>

框架版本:

  • “org.scalatest”%%“scalatest”%“3.0.3”%测试
  • 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

当我听到反射(reflection)时,我想到Object.getClass() ,因此调用 MyObject.getClass.getDeclaredMethods.foreach(println) 该方法显示为

private int example.HelloSpec$MyObject$.curriedAdder(int,int)

因此 curriedAdder(int,int) 为我提供了如何调用此柯里化(Currying)方法的提示。

关于scala - 使用 PrivateMethodTester 测试柯里化(Currying)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50796437/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com