2016-12-06 31 views
1

爲了加快R包中的某些功能,我使用Rcpp在cpp函數中對它們進行了重新編碼,併成功將這些cpp函數嵌入到此包中。下一步是測試cpp函數是否可以輸出與R中原始函數相同的結果。因此編寫測試是必要的。如何在R包中編寫cpp函數的測試?

但是,我被困在這一步。我已閱讀一些鏈接 Testing, R package by Hadley Wickham

CRAN:testthat, page 11

我所做的是我運行devtools::use_testthat()來創建一個tests/testthat目錄。然後,運行use_catch(dir = getwd())添加測試文件tests/testthat/test-cpp.R。在這一點上,我認爲expect_cpp_tests_pass()可能工作,但只是卡住了它。如果我有原始功能add_inflowadd_inflow_Cpp。我如何測試這兩個函數是否相等?

+0

你是什麼意思,當你說,*「在這一點上,我認爲[...]但只是卡住了它」* - 確實遇到錯誤或什麼? – nrussell

+0

請發佈最少重複性的示例。 – coatless

+0

@nrussell根本沒有錯誤,這只是意味着我不知道如何繼續前進,有沒有什麼直覺可以幫助我繼續? –

回答

4

?use_catch試圖準確地描述爲testthat的測試基礎設施是如何在這裏工作,所以我就複製一個答案文檔:

調用use_catch()將:

  1. 創建一個文件src/test-runner.cpp,它確保測試包 能夠理解如何運行你的包的單元測試,

  2. 中創建一個示例測試文件的src /測試example.cpp,展示你怎麼可能 使用捕捉編寫單元測試,並

  3. 添加測試文件的測試/ testthat /測試cpp.R,這確保testthat 將在調用devtools :: test()或 R CMD檢查期間運行您的編譯測試。

C++單元測試可以被添加到C++源文件的包的src/ 目錄中,具有類似於 testthat測試R代碼裏面的格式。

編譯軟件包時,運行這些測試的單元測試以及編譯到R軟件包中的 將與C入口點 run_testthat_tests()一起編譯。 testthat將使用該入口點在檢測到時運行您的單元測試 。

總之,如果你想使用捕捉編寫自己的C++單元測試,你可以按照自動生成test-example.cpp文件的例子。 testthat將自動運行您的測試,並在常規devtools::test()過程中報告故障。

請注意,使用Catch專門用於在C++級別編寫單元測試。如果您想編寫R測試代碼,那麼Catch將與您的用例無關。你可能看動機是icd


一包 - 見this file爲你怎麼可能趕上寫單元測試與testthat包裝的一個例子。

相關問題