问题标签 [testthat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 如何让 devtools::test() 考虑包依赖
实际问题
似乎devtools::test()
不能确保在DESCRIPTION
运行单元测试之前加载包文件中所述的包依赖项。我该如何改变呢?
细节
我正在编写一个包 ( B
) 来导入我的另一个包 ( A
)。
当我尝试通过 运行单元测试devtools::test()
,或者更准确地说,通过 RStudio 中的快捷方式运行单元测试时,某些测试会失败,因为导入的包似乎被忽略/未加载,因此无法找到SHFT + CRTL + T
某个函数 ( )。isPackageInstalled
尝试在运行之前A
手动加载导入的包也无济于事。我想这是因为(或)“模拟”了一个新的工作空间状态?不过,在事先手动加载包之后,“一个接一个”地运行单元测试就可以了。devtools::test()
devtools
testthat
A
我认为 devtools 会在DESCRIPTION
文件中查找包依赖项B
,从而像运行时那样加载它们require("B")
,但显然不是。
这是我的DESCRIPTION
文件:
这是我运行的代码:
这就是 RStudio 的build
窗格给我的:
我在这里错过了什么吗?
构建工具对话截图:
r - 如何在testthat框架中设置expect_equal的容差
我想知道在 R 中是否可以使用testthat
测试框架来设置相等的容差。
目前,如果example.R
是:
并用 执行test_file('example.R','stop')
,第一个测试通过,但第二个测试失败:
是否可以为平均相对差设置更高的误差阈值?例如 1e-3。我有一些只有小数点后 3 位精度的预期结果,这意味着现在我的测试总是失败......
r - testthat 模式用于长时间运行的测试
我有一堆测试,我不希望它们在 CRAN 检查或 Travis CI 构建期间运行。它们要么长时间运行,要么可能导致写入网络数据库的事务/并发冲突。将它们(从 R CMD 检查测试中)分离出来的哪种方法最适合testthat?
我应该把这些测试放在一个单独的文件夹中吗?我应该标记他们的文件名并使用正则表达式吗?(例如,在 test_package 中使用过滤器参数来跳过@Jeroen 的测试)
http://cran.r-project.org/web/packages/policies.html:
长时间运行的测试和小插曲代码可以作为可选的检查,但要确保剩下的检查确实锻炼了包的所有功能。
r - 获取 R 文件而不运行它(单元测试)
我们正在构建一个 R 代码库,并希望对我们编写的任何函数进行单元测试。到目前为止,我们已经为 R 找到了两个测试库:RUnit 和 testthat。
在进行了一些沙盒测试之后,我们开发了一种可靠的方法来在每次运行时测试代码。例如:
很简单。但是,我们还希望能够在不运行定义它的脚本的情况下测试函数(例如在 makefile 中使用 unittest 标志)。为此,我们将在 test.R 中编写 unittests
并运行它而不运行 sample.R 的其余部分。但是,当上面的代码运行时,不仅函数,而且 sample.R 中的其余代码都会运行,在这个例子中输出“Running fun()...”。有什么方法可以仅从文件中 source() 获取用户定义的函数吗?
如果不是,您是否建议将函数放在一个单独的文件中(例如,functions.R),该文件可以通过在 test.R 中进行单元测试并在 sample.R 中运行时运行?那里的缺点似乎是所需的样板:一个用于流程的文件,一个用于功能的文件,一个用于运行测试的文件。
r - testthat 中的神秘错误消息
我在 Rstudio (Windows 0.98.1056) 中运行 testthat,我收到以下错误。它似乎是在我更新 Rstudio 和安装的 R 包之后出现的,但我怀疑这两者可能没有直接关系。该错误也发生在一个非常简单的测试文件上。有没有人遇到过这个?
文件:测试/test-all.R
文件:测试/testthat/matrixUtils-test.R
错误信息:
r - Rcpp::sourceCpp 的相对文件路径
如何Rcpp::sourceCpp
使用 C++ 文件的相对路径而不是绝对路径进行调用?当我使用绝对路径调用时R CMD check
,两者都有效:testthat
Rcpp:sourceCpp
但是当我尝试使用system.path
或类似的相对路径时
我的包没有通过R CMD check
,因为找不到 C++ 源文件。似乎必须有一个标准的方法来做这种事情,但我不知道。我非常感谢一些帮助。
r - 如果 `testthat` 测试在 `R` 中失败,则打印自定义诊断信息
我使用testthat
单元测试来检查data.frame
函数返回的值是否与我期望它返回的相同。如果测试失败,testthat
打印一些诊断信息,例如:
但是,我真的很想看看函数的实际输出,即打印返回的data.frame
. testthat
如果测试失败,有没有办法打印测试功能的输出(或其他一些自定义诊断信息) ?
r - 在 R testthat 中处理测试工作流
我有两个文件test_utils.r
,test_core.r
它们包含对各种实用程序和一些核心功能的测试,它们被分成不同的“上下文”。我可以通过移动我的test_that()
语句来控制每个文件中的测试流程。
但是我正在寻找一种可以创建不同工作流的方法,比如确保在运行时首先运行来自 Context A_utils 的测试,然后是来自 Context B_Core 的测试,然后是来自上下文 B_Utils 的测试。
关于如何实现这一点的任何想法?
r - 数值方法产生平台相关的结果
我的小包裹有一个相当复杂的问题。基本上,我正在构建一个 GARCH(1,1) 模型,其中rugarch
包含专门为此目的设计的包。它使用一系列求解器(由Rsolnp
and提供nloptr
,通用非线性优化)并且工作正常。我正在testthat
通过提供基准解决方案来测试我的方法,该解决方案之前是通过在 Windows(这是要使用的包的主要平台)下手动运行代码获得的。
现在,当解决方案在多次连续运行中不一致时,我最初遇到了一些问题。差异在我为求解器指定的容差范围内(默认值solver = 'hybrid'
,如文档所建议的那样),所以我猜测它使用了某种随机化。所以我去掉了随机种子和并行化(“合法”原因)并且问题得到了解决,我每次在 Windows 下都得到相同的结果,所以我运行 R CMD CHECK 并testthat
成功了。
之后我决定自动化一点,现在构建过程由travis控制。令我惊讶的是,Linux 下的结果与我的基准测试不同,日志指出
read_sequence(file_out) 不等于 read_sequence(file_benchmark)
平均相对差:0.00000014688
多次rebuild产生相同的结果,并且差异总是相同的,这意味着在Linux下解决方案也是一致的。作为临时修复,我根据平台设置容差限制,并且测试通过(请参阅最新版本)。
所以,总结一下:
- 数字过程分别在 Windows 和 Linux 平台上产生相同的输出;
- 但是,这些输出是不同的,并且不是由随机种子和/或并行化引起的;
我一般只关心在 Windows 下的支持,不打算公开发布,所以这对我的包本身来说没什么大不了的。但我提请注意这一点,因为其中一个被广泛使用的求解器可能存在问题。
不,我不是要修复我的代码:依赖于平台的容差非常难看,但到目前为止它已经完成了工作。问题是:
- 还有什么可以“合法地”(或“自然地”)导致所描述的差异的吗?
- 是否需要低级数值例程才能在所有平台上产生相同的结果?会不会是我期望太高?
- 我应该非常关心这个吗?这是常见的情况吗?
r - 测试 r 中的功能不起作用
我的任务是编写几个测试来显示案例是否错误。
但是,错误消息如下。
我无法弄清楚为什么测试不起作用。