如何编写测试用例以使用r中的testthat检查函数是否正常工作?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写测试用例以使用r中的testthat检查函数是否正常工作?相关的知识,希望对你有一定的参考价值。
我有很多功能可以检查每个功能是否工作正常。我对使用“ testthat”包非常陌生。首先,我的代码必须从某个位置读取数据
baseData = fread(file = "./Data/ABC.csv", data.table = FALSE, stringsAsFactors = FALSE, showProgress = FALSE, encoding = "UTF-8")
接下来,我要基于特定列过滤数据,例如ab_010 =10。这是该代码,
baseData = baseData %>% filter(., ab_010 == 10)
现在,我想使用testthat检查过滤是否正确完成。我也经历了很多R突击,例如https://b-rodrigues.github.io/fput/unit-testing.html。但是对于如何将此案例应用于我的场景,我没有一个明确的想法。这是我使用testthat编写的代码,
test_that("To check Base data is being read correctly",
expected <- fread(file = "./Data/ABC.csv", data.table = FALSE, stringsAsFactors = FALSE, showProgress = FALSE, encoding = "UTF-8")
actual <- fread("./Data/ABC.csv")
expect_equal(expected,actual)
)
测试失败!我需要在哪里进行更改?
(至少有两种方法可以测试像这样的功能的行为:
- 运行功能,并仔细检查输出。如果您完全确定输出正确无误,则可以保存此输出(例如,使用dput),然后将此正确版本与该函数返回的版本进行比较。
- 独立于函数而实现相同的逻辑,并将函数的输出与该独立代码的输出进行比较。
第一个可能更健壮,因为对于情况2,可以在测试和函数中实现相同的错误。但是,这通常会更耗时,因为这还取决于您确定保存的输出是否正确。
我已经找到了解决方案。首先,让我分享我在如何使用“ testthat”方面有丰富知识的资源。https://r-pkgs.org/tests.html。作者本人对testthat的网站有很好的解释。
什么是testthat,如何将其用于单元测试?我读了很多关于testthat的文章,这是对此的简要说明。首先,“ testthat”是R中用于进行单元测试的软件包。它主要包含三个概念,
- 期望
- 测试
- 文件
期望] >>
所以测试的基本单位是期望。这些不过是测试用例或我们要测试的内容。期望代码应以Expect_开头。 testthat软件包中有15个以上的期望。最常用的是“ expect_that”。其语法为expect_that(实际结果,预期结果)
。其他常用的期望值为expect_true(),expect_false(),expect_output()等...Test
测试不过是我们要测试的期望。使用关键字test_that()完成test_that的语法为test_that(关于测试的描述,测试的条件(期望))>>。
[文件
]文件是测试文件。要测试的文件应以test_filename开头。
如何知道测试是否执行?
如果运行了该代码并执行了下一行,则测试成功。如果测试失败,则返回错误消息。
我如何解决我的问题?
我的问题是检查过滤是否正确进行。这是该代码,
test_that("Filtering of ab010 == 10 as expected", require("dplyr") expect_true(unique(baseData[,"ab010"]) == 10) )
如果测试失败,则会引发类似这样的错误消息
Error: Test failed: 'Filtering of ab010 == 10 as expected' * unique(baseData[, "ab010"]) == 10 isn't true.
这解决了我的问题。
以上是关于如何编写测试用例以使用r中的testthat检查函数是否正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
是否有一个 testthat expect_* 函数用于比较两个对象的行为?
我们可以使用 testthat 包中的函数来测试向量的元素吗?