Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
Scala 使用PrivateMethodTester测试当前方法_Scala_Unit Testing_Scalatest - Fatal编程技术网

Scala 使用PrivateMethodTester测试当前方法

Scala 使用PrivateMethodTester测试当前方法,scala,unit-testing,scalatest,Scala,Unit Testing,Scalatest,我试图使用PrivateMethodTester测试一个curried私有方法(实际上是函数),但无法确定如何调用它 考虑以下curried方法: 下面给出了编译错误 assert(9, MyObject.invokePrivate(PrivateMethod[Int]('curriedAdder)(2)(7))) .. [error] /path/to/MyObject.scala:76:80: org.scalatest.PrivateMethodTester.Invocation[In

我试图使用
PrivateMethodTester
测试一个curried私有方法(实际上是函数),但无法确定如何调用它

考虑以下curried方法:


下面给出了编译错误

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
    测试当前的私有方法
  • 如果是,我错在哪里

框架版本:

  • “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)
      
      根据:

      私有方法是通过反射动态调用的

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

      private int example.HelloSpec$MyObject$.curriedAdder(int,int)
      
      所以
      curriedAdder(int,int)
      对我来说是一个如何调用这个curried方法的提示

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