問題タブ [testthat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
897 参照

r - devtools::test() でパッケージの依存関係を考慮する方法

実際の質問

単体テストを実行する前にdevtools::test()、パッケージのファイルに記載されているパッケージの依存関係が読み込まれていることを確認していないようです。DESCRIPTIONどうすればそれを変更できますか?

詳細

B別のパッケージ ( ) をインポートするパッケージ ( ) を作成していますA

devtools::test()、またはより正確にはRStudioのショートカットを介して単体テストを実行しようとするSHFT + CRTL + Tと、インポートされたパッケージが無視されている/読み込まれていないように見え、特定の関数(isPackageInstalled)が見つからないため、特定のテストが失敗します。

実行する前にインポートしたパッケージAを手動でロードしようとしても役に立ちませんでした。これは、 (または) 新鮮なワークスペースの状態を「シミュレート」するという事実によるものだと思いますか? ただし、事前にパッケージを手動でロードした後、単体テストを「1つずつ」実行すると問題なく動作します。devtools::test()devtoolstestthatA

devtools は のDESCRIPTIONファイルでパッケージの依存関係を検索しB、実行時のようにそれらをロードすると思いましたrequire("B")が、明らかにそうではありません。

これが私のDESCRIPTIONファイルです:

実行したコードは次のとおりです。

それがRStudioのbuildペインが私に与えたものです:

ここで何か不足していますか?

ビルド ツール ダイアログのスクリーンショット:

ここに画像の説明を入力

0 投票する
1 に答える
6400 参照

r - testthatフレームワークでexpect_equalの許容範囲を設定する方法

testthatRでテストフレームワークを使用して同等の許容範囲を設定できるかどうかを知りたいです。

現在、次の場合example.R:

で実行するとtest_file('example.R','stop')、最初のテストはパスしますが、2 番目のテストは次のように失敗します。

平均相対差のエラーしきい値を高く設定することは可能ですか? たとえば、1e-3。小数点以下 3 桁の精度で期待される結果がいくつかあります。これは、テストが常に失敗することを意味します...

0 投票する
2 に答える
1336 参照

r - 長期実行テスト用の testthat パターン

CRAN チェックまたは Travis CI ビルド中に実行したくないテストがたくさんあります。それらは長時間実行されるか、ネットワーク化されたデータベースへの書き込みでトランザクション/同時実行の競合を引き起こす可能性があります。(R CMD チェック テストから) それらを分離するどのアプローチがtestthatで最もうまく機能しますか?

これらのテストを別のフォルダーに入れる必要がありますか? ファイル名にタグを付けて正規表現を使用する必要がありますか? (例: test_package でフィルター引数を使用して @Jeroenによるテストをスキップする)

http://cran.r-project.org/web/packages/policies.html :

長時間実行されるテストとビネット コードは、チェックのためにオプションにすることができますが、残されたチェックがパッケージのすべての機能を実行することを確認してください。

0 投票する
1 に答える
885 参照

r - R ファイルを実行せずにソース化する (単体テスト)

私たちはRコードベースを構築しており、私たちが書いた関数をユニットテストしたいと考えています. これまでのところ、R 用の 2 つのテスト ライブラリ、RUnit と testthat が見つかりました。

少しサンドボックス化を行った後、実行するたびにコードをテストするための確実な方法を開発しました。例えば:

十分に単純です。ただし、関数が定義されているスクリプトを実行せずに関数をテストする機能も必要です (たとえば、makefile の unittest フラグを使用)。これを行うには、test.R に unittests を記述します。

sample.R の残りを実行せずに実行します。しかし、上記のコードを実行すると、関数だけでなく、sample.R の残りのコードも実行され、この例では「Running fun()...」と出力されます。ファイルからユーザー定義関数のみを source() する方法はありますか?

そうでない場合は、関数を別のファイル (functions.R など) に入れることをお勧めしますか? そこの欠点は、ボイラープレートが必要であるように思われます。プロセス用のファイル、関数用のファイル、およびテストを実行するためのファイルです。

0 投票する
1 に答える
454 参照

r - testthat の不可解なエラー メッセージ

Rstudio (Windows 0.98.1056) で testthat を実行していますが、次のエラーが発生します。Rstudio とインストールした R パッケージを更新した後に表示されたようですが、この 2 つが直接関係していない可能性があります。エラーは、非常に単純なテスト ファイルでも発生します。誰かがこれに遭遇しましたか?

ファイル: tests/test-all.R

ファイル: tests/testthat/matrixUtils-test.R

エラーメッセージ:

0 投票する
1 に答える
483 参照

r - Rcpp::sourceCpp の相対ファイル パス

Rcpp::sourceCpp絶対パスではなく、C++ ファイルへの相対パスを使用して呼び出すにはどうすればよいですか? 絶対パスで呼び出すと、両方とも機能しR CMD checkます。testthatRcpp:sourceCpp

しかし、system.pathまたはのような相対パスを使用しようとすると

R CMD checkC++ ソース ファイルが見つからないため、私のパッケージはパスしません。この種のことを行う標準的な方法があるに違いないようですが、私は知りません。助けていただければ幸いです。

0 投票する
0 に答える
88 参照

r - 数値法は、プラットフォームに依存する結果を生成します

私の小さなパッケージにはかなり複雑な問題があります。基本的に、私はrugarchまさにこの目的のために設計されたパッケージで GARCH(1,1) モデルを構築しています。これは一連のソルバー (汎用非線形最適化であるRsolnpおよびによって提供される) を使用し、正常に動作します。nloptrベンチマーク ソリューションを提供することで、メソッドをテストしてtestthatいます。これは、Windows (パッケージを使用するメイン プラットフォーム) でコードを手動で実行することによって以前に取得したものです。

さて、私は最初、いくつかの連続した実行で解が一貫していないときにいくつかの問題を抱えていました。違いは、ソルバーに指定した許容範囲内 (solver = 'hybrid'ドキュメントで推奨されているようにデフォルト) であったため、ある種のランダム化を使用していると推測されます。そのため、ランダム シードと並列化の両方を取り除き (「正当な」理由)、問題は解決されました。Windows では毎回同じ結果が得られるので、R CMD CHECK を実行してtestthat成功します。

その後、少し自動化することにしました。現在、ビルド プロセスはtravisによって制御されています。驚いたことに、Linux での結果は私のベンチマークとは異なります。ログには次のように記載されています。

read_sequence(file_out) が read_sequence(file_benchmark) と等しくない
平均相対差: 0.00000014688

何度か再構築しても同じ結果が得られ、違いは常に同じです。つまり、Linux では解決策も一貫しています。一時的な修正として、プラットフォームに応じて許容限界を設定しており、テストはパスします (最新のビルドを参照)。

要約すると、次のようになります。

  1. 数値手続きは、Windows プラットフォームと Linux プラットフォームの両方で別々に同じ出力を生成します。
  2. ただし、これらの出力は異なり、ランダム シードや並列処理が原因ではありません。

私は通常、Windows でのサポートのみに関心があり、公開リリースを行う予定はありません。そのため、これは私のパッケージ自体にとって大した問題ではありません。しかし、非常に広く使用されているソルバーの 1 つに問題がある可能性があるため、注意を喚起しています。

いいえ、コードを修正するように求めているわけではありません。プラットフォームに依存する許容範囲は非常に醜いですが、これまでのところ機能しています。質問は次のとおりです。

  1. 「正当に」(または「自然に」)説明されている違いにつながる可能性のあるものは他にありますか?
  2. すべてのプラットフォームで同じ結果を生成するには、低レベルの数値ルーチンが必要ですか? 期待しすぎてしまうことはありますか?
  3. 私はこれについて多くのことを気にする必要がありますか?これは一般的な状況ですか?