Bra*_*wan 5 unit-testing r rcpp
为了加速R包中的某些功能,我使用Rcpp在cpp函数中重新编码它们,并成功地将这些cpp函数嵌入到这个包中.下一步是测试cpp函数是否可以输出与R中的原始函数相同的结果.因此编写测试是必要的.
但是,我坚持这一步.我已经阅读了Hadley Wickham的测试,R包的一些链接
我所做的是我运行devtools::use_testthat()
创建一个tests/testthat目录.然后,运行use_catch(dir = getwd())
以添加测试文件tests/testthat/test-cpp.R.在这一点上,我认为expect_cpp_tests_pass()
可能会奏效,但只是坚持下去.如果我有原始函数调用add_inflow
和add_inflow_Cpp
.如何测试这两个函数是否相等?
?use_catch
试图准确描述测试基础设施如何在testthat
这里工作的文档,所以我只是复制它作为答案:
调用use_catch()将:
创建一个文件src/test-runner.cpp,它确保testthat包能够理解如何运行包的单元测试,
创建一个示例测试文件src/test-example.cpp,它展示了如何使用Catch编写单元测试,以及
添加一个测试文件tests/testthat/test-cpp.R,它确保在调用devtools :: test()或R CMD检查期间运行已编译测试的test.
可以将C++单元测试添加到包的src /目录中的C++源文件中,其格式类似于使用testthat测试的R代码.
编译包时,将使用用于运行这些测试的线束的单元测试编译到R包中,使用C入口点run_testthat_tests().testthat将使用该入口点在检测到时运行您的单元测试.
简而言之,如果您想使用Catch编写自己的C++单元测试,可以按照自动生成test-example.cpp
文件的示例进行操作.testthat
将自动运行您的测试,并在常规devtools::test()
过程中报告失败.
请注意,Catch的使用专门用于在C++级别编写单元测试.如果您想编写R测试代码,那么Catch将与您的用例无关.
您可以将其视为动机的一个包是icd包 - 请参阅此文件,了解如何使用testthat
包装器编写Catch单元测试的一个示例.