首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用r中的testthat编写测试用例来检查函数是否正常工作?

如何使用r中的testthat编写测试用例来检查函数是否正常工作?
EN

Stack Overflow用户
提问于 2020-03-05 19:00:43
回答 2查看 156关注 0票数 0

我有很多函数来检查每个函数是否都工作得很完美。我对使用'testthat‘包非常陌生。首先,我的代码必须从某个位置读取数据

代码语言:javascript
复制
  baseData = fread(file = "./Data/ABC.csv", data.table = FALSE, stringsAsFactors = FALSE, showProgress = FALSE, encoding = "UTF-8")

接下来,我想根据特定的列过滤数据,假设ab_010 = 10。

代码语言:javascript
复制
  baseData = baseData %>% filter(., ab_010 == 10)

现在,我想使用testthat检查过滤是否正确。此外,我还经历了许多bolgs,比如这个https://b-rodrigues.github.io/fput/unit-testing.html。但是我不清楚如何将这个案例应用到我的场景中。这是我用testthat写的一段代码,

代码语言:javascript
复制
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)
})

测试失败了!我需要在哪里进行更改?

EN

回答 2

Stack Overflow用户

发布于 2020-03-05 19:08:03

有(至少)两种方法来测试这样的函数的行为:

  1. 运行该函数,并仔细检查输出。如果您完全确定输出是正确的,则可以保存此输出(例如,使用dput ),然后将此正确版本与独立于函数的相同逻辑的function.
  2. Implement返回的版本进行比较,并将函数的输出与此独立代码的输出进行比较。

第一种可能更健壮,因为对于第二种情况,相同的错误可以在测试和函数中实现。然而,它通常更耗时,因为它还取决于您是否确定保存的输出是正确的。

票数 0
EN

Stack Overflow用户

发布于 2020-03-06 19:41:09

我已经找到了这样做的解决方案。首先,让我分享一些关于如何使用“testthat”的好知识的资源。https://r-pkgs.org/tests.html。这个网站有作者自己关于测试的很好的解释。

什么是testthat,它如何用于单元测试?我读了很多关于测试的内容,这是关于它的简短解释。首先,'testthat‘是一个用来进行单元测试的R包。它主要由三个概念组成,

  1. Expectations
  2. Tests
  3. Files

期望

因此,测试的基本单位应该是期望。这些只是测试用例或者我们想要测试的东西。expect_的代码应该以expect_开头。在测试这个包时,有超过15个期望。最常用的是"expect_that“。其语法为expect_that(实际结果,预期结果)。通常使用的其他期望是expect_true()、expect_false()、expect_output()等。

测试

测试只不过是我们想要测试的期望。这是使用关键字test_that()完成的,test_that的语法是test_that(关于测试的描述,测试的条件(期望))

文件

文件是测试文件。要测试的文件应以test_filename开头。

如何知道测试是否已执行?

一旦代码被执行,如果它被运行并转到下一行,那么测试就成功了。如果测试失败,则返回一条错误消息。

我是如何解决我的问题的?

我的问题是检查过滤是否正确发生。这是它的代码,

代码语言:javascript
复制
test_that("Filtering of ab010 == 10 as expected",{
  require("dplyr")
  expect_true(unique(baseData[,"ab010"]) == 10)
})

如果测试失败,则会抛出如下所示的错误消息

代码语言:javascript
复制
Error: Test failed: 'Filtering of ab010 == 10 as expected'
* unique(baseData[, "ab010"]) == 10 isn't true.

这解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60543855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档