我目前正在嘲笑一些单元测试,使用包testthat
和mockery
。我试图了解mockery
包中的函数expect_args
如何在使用apply
的函数中实际调用模拟函数时工作。这里是一个测试成功的例子。使用模拟与应用R
myMean <- function(A){
apply(A,1,mean)
}
myMat = matrix(rep(1,6), nrow = 2, ncol = 3)
test_that("myMean calls base::mean correctly",{
m <- mock(1, cycle = TRUE)
with_mock(
`base::mean` = m,
myMean(myMat),
expect_args(m, 1, as.double(myMat[1,])))
})
让我们现在稍微复杂一点的例子,其中myMean
的说法实际上是一个data.frame
,需要转化为函数内的一个矩阵。
myMean <- function(A){
B = as.matrix(A)
apply(B,1,mean)
}
myMat = as.data.frame(myMat)
test_that("myMean calls base::mean correctly",{
m <- mock(1, cycle = TRUE)
with_mock(
`base::mean` = m,
myMean(myMat),
expect_args(m, 1, as.double(myMat[1,])))
})
然后我收到以下错误信息:
Error: Test failed: 'myMeanSimple calls base::mean correct number of times
* 1st actual argument not equal to 1st expected argument.
names for target but not for current
此错误是在mockery
包的vignette解释。尽管如此,我无法找到我应该与as.double(myMat[1,])
联系的参数名称。
是的。非常感谢你。 –