В настоящее время я издевательски разбираюсь в некоторых модульных тестах, используя пакеты testthat
и mockery
. Я пытаюсь понять, как функция expect_args
из пакета mockery
работает, когда функция издевательства фактически вызывается функцией, используя 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
Эта ошибка объясняется на vignette из mockery
пакета. Тем не менее мне не удается найти имя аргумента, которое я должен связать с as.double(myMat[1,])
.
Да, так оно и есть. Большое спасибо. –