我目前正在嘲笑一些單元測試,使用包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,])
聯繫的參數名稱。
是的。非常感謝你。 –