在R中测试R6类中的私有方法

Hol*_*ing 3 r r6

我目前正在项目中使用R6类.

我想编写单元测试,也测试我正在使用的私有方法的功能(最好不要通过使用这些私有方法的更复杂的公共方法).

但是,我无法访问似乎访问私有方法.

我怎么做到最好?

谢谢!

Gre*_*lia 10

这是一个不需要环境破解或改变您想要测试的类的解决方案,而是创建一个为您进行测试的新类.

R6派生类中,可以访问private其基类的方法(与需要关键字C++以及Java在何处protected获得相同结果的方法不同).因此,您可以编写一个TesterClass派生自您要测试的类.例如:

library(R6)

ClassToTest <- R6Class(
  private = list(
    privateMember = 7,
    privateFunction = function(x){
      return(x * private$privateMember)
    }
  )
)

TesterClass <- R6Class(
  inherit = ClassToTest,
  public = list(
    runTest = function(x = 5){
      if(x * private$privateMember != private$privateFunction(x))
        cat("Oops. Somethig is wrong\n")
      else
        cat("Everything is fine\n")
    }
  )
)

t <- TesterClass$new()
t$runTest()
# Everything is fine
Run Code Online (Sandbox Code Playgroud)

这种方法的一个优点是,它可以保持您的环境清洁,以防您想要保存详细的测试结果.