Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 有没有一种方法可以记录测试并获得报告输出?_R_Testthat - Fatal编程技术网

R 有没有一种方法可以记录测试并获得报告输出?

R 有没有一种方法可以记录测试并获得报告输出?,r,testthat,R,Testthat,我需要记录针对我编写的软件包完成的测试。 我希望能够生成一份报告,其中提供了运行的测试的详细信息,最终用户可以查看该报告以确定测试中是否存在差距。 最终用户是一个委员会,所以需要一些非代码的东西 我所想象的是在每个测试中添加类似于roxygen块的东西来解释它在做什么。 在这里面,我想根据测试的内容将测试分配给特定的组,例如错误输入、预期警告等。 很明显,这将包括被测试功能的细节等。 我的一些测试也更像是集成测试,测试高级函数流是否正确 有没有办法通过RStudio和testthat实现这一点?

我需要记录针对我编写的软件包完成的测试。

我希望能够生成一份报告,其中提供了运行的测试的详细信息,最终用户可以查看该报告以确定测试中是否存在差距。 最终用户是一个委员会,所以需要一些非代码的东西

我所想象的是在每个测试中添加类似于roxygen块的东西来解释它在做什么。 在这里面,我想根据测试的内容将测试分配给特定的组,例如错误输入、预期警告等。 很明显,这将包括被测试功能的细节等。 我的一些测试也更像是集成测试,测试高级函数流是否正确

有没有办法通过RStudio和testthat实现这一点?

不必是HTML,但我认为这将是最容易的重新打包下游使用

到目前为止,我唯一的想法是使用“上下文”调用,但在最新版本的test中,它已被弃用,因此正在寻找一个更受支持的解决方案


感谢大家的帮助。

我仍然对一个更优雅的解决方案感兴趣,但这里有一个我提出的最简单的例子,它在短期内符合我的目的

总结
  • 在测试文件中使用多个上下文调用将测试划分为有意义的组
  • 使用ListReporter以我可以解析的形式获取结果
  • 使用RMarkdown报告将结果解析为HTML,并按文件和上下文进行拆分
示例测试文件(testUnitTests.R) 标记文件示例(TestReport.Rmd)
---
标题:“标题”
输出:html\u文档
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE,message=FALSE,results=“asis”)
图书馆(dplyr)
SummarResults%Summary_如果(is.numeric,sum)%%>%knitr::kable()
}
写入结果%
嵌套方式(文件,.key=“类别”)
```
##总结
```{r WriteSummary}
总结结果(测试结果个人)
```
##结果
```{r WriteResults}
WriterResults(testResultsNested)
```

我仍然对更优雅的解决方案感兴趣,但这里有一个我提出的最简单的例子,它在短期内符合我的目的

总结
  • 在测试文件中使用多个上下文调用将测试划分为有意义的组
  • 使用ListReporter以我可以解析的形式获取结果
  • 使用RMarkdown报告将结果解析为HTML,并按文件和上下文进行拆分
示例测试文件(testUnitTests.R) 标记文件示例(TestReport.Rmd)
---
标题:“标题”
输出:html\u文档
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE,message=FALSE,results=“asis”)
图书馆(dplyr)
SummarResults%Summary_如果(is.numeric,sum)%%>%knitr::kable()
}
写入结果%
嵌套方式(文件,.key=“类别”)
```
##总结
```{r WriteSummary}
总结结果(测试结果个人)
```
##结果
```{r WriteResults}
WriterResults(testResultsNested)
```
context("Check unit-testing functionality")
test_that("Succeed", {succeed()})
test_that("Fail", {fail()})

context("Check unit-testing condition reporting")
test_that("Error", {stop("Force an error")})
test_that("Warn+succeed", {warning("Force a warning, but succeed"); succeed()})
test_that("Warn+fail", {warning("Force a warning, and fail"); fail()})
---
title: "Title"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, results = "asis")
library(dplyr)

SummariseResults <- function(res) {
  res %>% summarise_if(is.numeric, sum) %>% knitr::kable()
}
WriteResults <- function(res) {
  purrr::pwalk(list(res$file, res$Categories), WriteFileResults)
}
WriteFileResults <- function(file, categories, ...) {
  cat("###", file, "\n")
  purrr::pwalk(list(categories$context, categories$Results), WriteCategoryResults)
}
WriteCategoryResults <- function(category, tests, ...) {
  cat("####", category, "\n")
  print(knitr::kable(tests))
}
```

```{r GenerateResults}
testResultsRaw <- testthat::test_file("testUnitTests.R", reporter = testthat::ListReporter)

testResultsIndividual <- testResultsRaw %>%
  as_tibble() %>%
  rename(Test = test) %>%
  group_by(file, context, Test) %>%
  summarise(NumTests = first(nb),
            Passed   = sum(passed),
            Failed   = sum(failed),
            Warnings = sum(warning),
            Errors   = sum(as.numeric(error)),
            Skipped  = sum(as.numeric(skipped)),
            .groups = "drop")

testResultsNested <- testResultsIndividual %>%
  nest_by(file, context, .key = "Results") %>%
  nest_by(file, .key = "Categories")
```

## Summary
```{r WriteSummary}
SummariseResults(testResultsIndividual)
```

## Results
```{r WriteResults}
WriteResults(testResultsNested)
```