【发布时间】:2017-05-13 07:59:12
【问题描述】:
我正在开发一个 R 包,其中一个函数通过 readline 的标准输入实现与用户的交互。我现在想知道如何测试这个函数的行为,最好使用testthat 库。
似乎test_that 函数假定用户输入的答案是""。我希望我可以测试用户可能输入的各种答案的行为条件。
下面是一个小示例代码。在实际开发中,marryme函数定义在单独的文件中,并导出到命名空间。
devtools::test() 在最后一行给我一个错误,因为答案永远不会变成是。我想测试当用户输入"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进行用户输入。 -
谢谢,@Roland。作为
readline的替代方案,您有什么建议?
标签: r readline r-package testthat