问题标签 [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.

0 投票
1 回答
897 浏览

r - 如何让 devtools::test() 考虑包依赖

实际问题

似乎devtools::test()不能确保在DESCRIPTION运行单元测试之前加载包文件中所述的包依赖项。我该如何改变呢?

细节

我正在编写一个包 ( B) 来导入我的另一个包 ( A)。

当我尝试通过 运行单元测试devtools::test(),或者更准确地说,通过 RStudio 中的快捷方式运行单元测试时,某些测试会失败,因为导入的包似乎被忽略/未加载,因此无法找到SHFT + CRTL + T某个函数 ( )。isPackageInstalled

尝试在运行之前A手动加载导入的包也无济于事。我想这是因为(或)“模拟”了一个新的工作空间状态?不过,在事先手动加载包之后,“一个接一个”地运行单元测试就可以了。devtools::test()devtoolstestthatA

我认为 devtools 会在DESCRIPTION文件中查找包依赖项B,从而像运行时那样加载它们require("B"),但显然不是。

这是我的DESCRIPTION文件:

这是我运行的代码:

这就是 RStudio 的build窗格给我的:

我在这里错过了什么吗?

构建工具对话截图:

在此处输入图像描述

0 投票
1 回答
6400 浏览

r - 如何在testthat框架中设置expect_equal的容差

我想知道在 R 中是否可以使用testthat测试框架来设置相等的容差。

目前,如果example.R是:

并用 执行test_file('example.R','stop'),第一个测试通过,但第二个测试失败:

是否可以为平均相对差设置更高的误差阈值?例如 1e-3。我有一些只有小数点后 3 位精度的预期结果,这意味着现在我的测试总是失败......

0 投票
2 回答
1336 浏览

r - testthat 模式用于长时间运行的测试

我有一堆测试,我不希望它们在 CRAN 检查或 Travis CI 构建期间运行。它们要么长时间运行,要么可能导致写入网络数据库的事务/并发冲突。将它们(从 R CMD 检查测试中)分离出来的哪种方法最适合testthat

我应该把这些测试放在一个单独的文件夹中吗?我应该标记他们的文件名并使用正则表达式吗?(例如,在 test_package 中使用过滤器参数来跳过@Jeroen 的测试

http://cran.r-project.org/web/packages/policies.html

长时间运行的测试和小插曲代码可以作为可选的检查,但要确保剩下的检查确实锻炼了包的所有功能。

0 投票
1 回答
885 浏览

r - 获取 R 文件而不运行它(单元测试)

我们正在构建一个 R 代码库,并希望对我们编写的任何函数进行单元测试。到目前为止,我们已经为 R 找到了两个测试库:RUnit 和 testthat。

在进行了一些沙盒测试之后,我们开发了一种可靠的方法来在每次运行时测试代码。例如:

很简单。但是,我们还希望能够在不运行定义它的脚本的情况下测试函数(例如在 makefile 中使用 unittest 标志)。为此,我们将在 test.R 中编写 unittests

并运行它而不运行 sample.R 的其余部分。但是,当上面的代码运行时,不仅函数,而且 sample.R 中的其余代码都会运行,在这个例子中输出“Running fun()...”。有什么方法可以仅从文件中 source() 获取用户定义的函数吗?

如果不是,您是否建议将函数放在一个单独的文件中(例如,functions.R),该文件可以通过在 test.R 中进行单元测试并在 sample.R 中运行时运行?那里的缺点似乎是所需的样板:一个用于流程的文件,一个用于功能的文件,一个用于运行测试的文件。

0 投票
1 回答
454 浏览

r - testthat 中的神秘错误消息

我在 Rstudio (Windows 0.98.1056) 中运行 testthat,我收到以下错误。它似乎是在我更新 Rstudio 和安装的 R 包之后出现的,但我怀疑这两者可能没有直接关系。该错误也发生在一个非常简单的测试文件上。有没有人遇到过这个?

文件:测试/test-all.R

文件:测试/testthat/matrixUtils-test.R

错误信息:

0 投票
1 回答
483 浏览

r - Rcpp::sourceCpp 的相对文件路径

如何Rcpp::sourceCpp使用 C++ 文件的相对路径而不是绝对路径进行调用?当我使用绝对路径调用时R CMD check,两者都有效:testthatRcpp:sourceCpp

但是当我尝试使用system.path或类似的相对路径时

我的包没有通过R CMD check,因为找不到 C++ 源文件。似乎必须有一个标准的方法来做这种事情,但我不知道。我非常感谢一些帮助。

0 投票
2 回答
702 浏览

r - 如果 `testthat` 测试在 `R` 中失败,则打印自定义诊断信息

我使用testthat单元测试来检查data.frame函数返回的值是否与我期望它返回的相同。如果测试失败,testthat打印一些诊断信息,例如:

但是,我真的很想看看函数的实际输出,即打印返回的data.frame. testthat如果测试失败,有没有办法打印测试功能的输出(或其他一些自定义诊断信息) ?

0 投票
1 回答
104 浏览

r - 在 R testthat 中处理测试工作流

我有两个文件test_utils.rtest_core.r它们包含对各种实用程序和一些核心功能的测试,它们被分成不同的“上下文”。我可以通过移动我的test_that()语句来控制每个文件中的测试流程。

但是我正在寻找一种可以创建不同工作流的方法,比如确保在运行时首先运行来自 Context A_utils 的测试,然后是来自 Context B_Core 的测试,然后是来自上下文 B_Utils 的测试。

关于如何实现这一点的任何想法?

0 投票
0 回答
88 浏览

r - 数值方法产生平台相关的结果

我的小包裹有一个相当复杂的问题。基本上,我正在构建一个 GARCH(1,1) 模型,其中rugarch包含专门为此目的设计的包。它使用一系列求解器(由Rsolnpand提供nloptr,通用非线性优化)并且工作正常。我正在testthat通过提供基准解决方案来测试我的方法,该解决方案之前是通过在 Windows(这是要使用的包的主要平台)下手动运行代码获得的。

现在,当解决方案在多次连续运行中不一致时,我最初遇到了一些问题。差异在我为求解器指定的容差范围内(默认值solver = 'hybrid',如文档所建议的那样),所以我猜测它使用了某种随机化。所以我去掉了随机种子和并行化(“合法”原因)并且问题得到了解决,我每次在 Windows 下都得到相同的结果,所以我运行 R CMD CHECK 并testthat成功了。

之后我决定自动化一点,现在构建过程由travis控制。令我惊讶的是,Linux 下的结果与我的基准测试不同,日志指出

read_sequence(file_out) 不等于 read_sequence(file_benchmark)
平均相对差:0.00000014688

多次rebuild产生相同的结果,并且差异总是相同的,这意味着在Linux下解决方案也是一致的。作为临时修复,我根据平台设置容差限制,并且测试通过(请参阅最新版本)。

所以,总结一下:

  1. 数字过程分别在 Windows 和 Linux 平台上产生相同的输出;
  2. 但是,这些输出是不同的,并且不是由随机种子和/或并行化引起的;

我一般只关心在 Windows 下的支持,不打算公开发布,所以这对我的包本身来说没什么大不了的。但我提请注意这一点,因为其中一个被广泛使用的求解器可能存在问题。

不,我不是要修复我的代码:依赖于平台的容差非常难看,但到目前为止它已经完成了工作。问题是:

  1. 还有什么可以“合法地”(或“自然地”)导致所描述的差异的吗?
  2. 是否需要低级数值例程才能在所有平台上产生相同的结果?会不会是我期望太高?
  3. 我应该非常关心这个吗?这是常见的情况吗?
0 投票
1 回答
843 浏览

r - 测试 r 中的功能不起作用

我的任务是编写几个测试来显示案例是否错误。

但是,错误消息如下。

我无法弄清楚为什么测试不起作用。