代码之家  ›  专栏  ›  技术社区  ›  y2k-shubham

使用privatemethodtester的测试课程法

  •  4
  • y2k-shubham  · 技术社区  · 7 年前

    我想测试一个 课程 私有的 方法 (实际上 功能 )使用 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
    1 回复  |  直到 7 年前
        1
  •  3
  •   Mario Galic    7 年前

    以下内容适用于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) 方法显示为

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

    所以 curriedAdder(int,int) 是关于如何调用此课程方法的提示。

    推荐文章