- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 testthat
对读取和写入文件的函数进行单元测试的最佳方法是什么?
很抱歉问了一个复杂的问题,但我不确定这里出了什么问题。
我已经在 Fortran 中实现了很多函数,可以读取和写入文件。它们被编译在一个 R 包 cf 中。编写 R 扩展手册。我使用 testthat
进行的单元测试会生成随机内容,这些内容会使用 tempfile() 写入临时文件。在 R 包上运行 R CMD 检查可以在我的本地 Windows 机器上运行。
使用 R-devel 运行失败,因为它无法检测到 R-3.5.0 (devel) 的 Rtools。所以我提交给win-builder。
http://win-builder.r-project.org/但是失败并出现以下错误:
At line 9 of file auxil.f95
Fortran runtime error: Actual string length is shorter than the declared one for dummy argument 'fn' (96/255)
与相应的 Fortran 源代码:
subroutine get_nlines(fn, nlines, stat) !line 9
implicit none
!! Arguments
character(255), intent(in) :: fn
integer, intent(out) :: nlines, stat
!! Local variables
character(len=1) :: one
nlines = 0
open(40, file=fn, status='OLD')
do
read(40, *, iostat=stat) one
if (stat /= 0) exit
nlines = nlines + 1
end do
close(40)
end subroutine
Fortran代码存放在R包的src
子目录下,调用时用
get_nlines <- function(fn) {
stopifnot(file.exists(fn))
res <- .Fortran('get_nlines', fn=as.character(fn), nlines=integer(1), stat=integer(1))
if (res$nlines == 0 & res$stat != 0) {
warning(paste0('get_nlines did not read lines; IOSTAT error ', res$stat, '.'))
return(structure(NA, code=res$stat))
}
res$nlines
}
原来如此。不知道是我的Fortran代码写错了,还是win-builder服务器上出现的问题。
最佳答案
“我不知道我的 Fortran 代码是否有误” 从您的问题中,我仍然无法理解您所显示的代码是否是您的代码,或者它是否在内部您正在使用的一些 R 包。
如果它是您所说的 Fortran 代码(您没有显示任何其他内容),那么您应该尝试使用 character(*)
而不是 character(255)
,因为没有明显的理由要求确切的固定长度为 255。这正是错误消息所提示的,即 fn
不完全是您在 get_nlines() 中要求的 255 个字符
。
关于r - 使用 `testthat` 对写入/读取文件的函数或 Fortran 错误进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180641/
我的 R 包修改远程数据库中的数据,我想用 testthat 编写一些测试. 我知道我可以模拟数据库,但我宁愿简单地使用我们的开发数据库。 如何使数据库连接可用于所有需要它的测试,同时确保销毁所有创建
处理生成警告但又返回值的调用的最佳方法是什么? 例如 > require(testthat) > expect_warning(log(-1)) > expect_equal(log(-1), NaN
我想使用“testthat”来测试两个值是否不相等。我可以使用类似的东西来测试相等性 expect_that(x, equals(y)) 但是,如果我期望它们不相等呢?我可以用 expect_fals
我正在构建一个管道工应用程序,并计划使用 TestThat 进行单元测试。但是,当我运行 devtools::test() 时,上面写着 File does not exist: test.R . 我
我有一堆测试,我不希望它们在 CRAN 检查或 Travis CI 构建期间运行。它们要么长时间运行,要么可能导致写入网络数据库的事务/并发冲突。将它们分开的方法(从 R CMD 检查测试中)最适合
我不记得有任何问题,但突然之间,我无法安装任何包,因为 testthat 无法通过测试。作为第 22 条军规,我也无法安装 testthat,因为它无法通过测试。 R version 3.0.1 (2
我想测试一个可以抛出错误的函数,但我也想确保变量值是正确的(以验证错误发生前的预期最后状态 - 所以我想测试不需要的副作用)。可以这样做吗? 要测试的简化表达式 x <- 1 # could a
我正在使用 testthat 来测试具有类似于以下文件树的包: . ├── data │ └── testhaplom.out ├── inst │ └─
我有一个 Shiny 的应用程序,它使用了 4 个函数。我想测试这些功能,但它不是一个包。我应该如何构建我的代码?并在没有开发工具的情况下执行这些测试? 最佳答案 您可以使用 testthat::te
我想测试我的一个函数是否给出特定消息(或警告或错误)。 good <- function() message("Hello") bad <- function() message("Hello!!!!
我正在为一个包编写单元测试,有一些测试我不希望测试在失败时抛出错误,而是给出警告。 这不是我真正的代码,但假设我想测试以下内容: add_x_y <- function(x, y) x + y exp
构建包会导致以下警告: * checking for unstated dependencies in tests ... WARNING ‘library’ or ‘require’ call no
我正在使用 testthat检查我的包裹中的代码。我的一些测试是针对基本功能的,例如构造函数和 getter。其他的用于构建在基本功能之上的复杂功能。如果基本测试失败,那么预计复杂测试也会失败,因此没
我正在使用 Hadley's testthat-based approach用于自动测试我的包。 使用这种方法,最适合放置测试数据文件的位置是仅由测试脚本在 tests/testthat) 中使用的文
当我的 R 包目录结构在测试文件夹中直接包含 R 文件时 . +--Projroot +---- R | -- routine1.R | -- routine2.R +---- tes
我有一个包,我需要在其中使用 testthat 测试文件夹的创建和操作。因此我写了一个测试,它 首先创建文件夹(使用帮助文件)然后 做测试(这很好) 最后删除文件夹(使用名为“test-zz-clea
我正在使用 testthat 包来运行测试,到目前为止我对它非常满意。目前,我正在使用 test_file() 函数运行所有测试并将其结果捕获为数据帧,然后进行一些额外的分析。 但是,我想做的一件事是
问题:我怎样才能得到testthat在加载我的包的环境中运行,而不是从我的包继承? 背景: testthat包运行测试“在从包的命名空间环境继承的环境中”[请参阅文档 test_check ]。这意味
我正在寻找有关出色的 testthat 的最佳实践帮助。放置您的 library(xyzpackage) 调用以使用所有包功能的最佳位置在哪里? 我首先设置了一个 runtest.R 设置路径和包。然
是否有任何工具可以使用 testthat 包评估 R 脚本的代码覆盖率?除了在 an RJournal article 的 future 工作部分提及该主题外,我在 Google 上什么也没找到。 .
我是一名优秀的程序员,十分优秀!