【发布时间】:2018-08-22 00:40:20
【问题描述】:
我在一个软件包中有以下 R 函数,它将Sys.time() 输出到输出,以便用户了解算法是如何进行的:
func = function(num1, num2){
result = num1 + num2
return(paste0(' ', as.character(Sys.time()), ': with result: ', result))
}
该函数的使用示例如下:
> func(2, 2)
[1] " 2018-03-11 07:24:05: with result: 4"
>
我需要测试这个功能。通常,我会使用 testthat 包:
https://cran.r-project.org/web/packages/testthat/index.html
问题:如何set Sys.time() 来测试这个功能?是否有其他方法可以对此进行测试?
如果没有Sys.time(),这个过程会很简单:
library(testthat)
expect_equal(func(2, 2), 4)
expect_equal(func(2, -2), 0)
expect_error(func('a', 'b'))
【问题讨论】:
-
如何重写函数,使其返回包含结果和时间的类 {whateveryouwant} 的对象,并制作自定义打印函数类 {whateveryouwant}。然后在测试时可以忽略时间方面,直接得到结果。否则,您将对结果进行正则表达式,以后会很头疼。
-
@Dason “否则你将正则表达式的结果,这只会是一个头疼的事。”我不确定为什么。您可以在最后一个
:之后进行正则表达式并检查 4 是否存在 -
您刚刚回答了自己的问题。你不能也做这样的事情吗?
expect_equal(func(2, 2), paste0(' ', as.character(Sys.time()), ': with result: ', 4))这样你也在测试你的函数是否正确返回了时间 -
@EB2127 然后,当他们决定要更改测试中断的格式时。将实际数据与它们的格式化方式分开是在这里进行体面测试的良好第一步。
-
另外,如果有人想实际使用输出而不是在控制台中查看,那么以易于使用的格式返回输出会更有意义...
标签: r unit-testing testing testthat