我正在开发一个R包,其中一个函数通过标准输入使用readline
与用户交互。现在我想知道如何测试此功能的行为,最好使用testthat
库。
似乎test_that
函数假定用户输入的答案为""
。我希望能够测试各种可能输入的条件下该功能的行为。
以下是一个小例子代码。在实际开发中,marryme
函数定义在一个单独的文件中,并导出到命名空间中。
devtools::test()
在最后一行上产生错误,因为回答从未变成“yes”。我想测试当用户键入"y"
时该函数是否正确返回true。
library(testthat)
test_that("input", {
marryme <- function() {
ans <- readline("will you marry me? (y/n) > ")
return(ans == "y")
}
expect_false(marryme()) # this is good
expect_true(marryme()) # this is no good
})
marryme
拆分为两个函数。将除了readline
以外的所有内容放在一个可以测试的函数中,并使用包含readline
的包装函数调用该函数。顺便说一句,我不喜欢使用readline
进行用户输入。 - Rolandreadline
的建议吗? - Kota Mori