私はErlangが初めてです。EUnit と Common Test の 2 つのテスト フレームワークがあります。いつ使用するか混乱しています。Common Test に対する EUnit の利点、およびその逆の利点を誰かが説明してくれませんか。Common Test は、EUnit ができるすべてのことを実行できるようですが、EUnit を何を使用すればよいかわかりません。ありがとう!
3 に答える
Learn you some erlang (erlang に関する最高のオンライン リソースの 1 つで、公式ドキュメント以外にも) は、両方の方法を非常によく説明しています。
Pascal が指摘したように、EUnit はホワイト ボックス テストで使用するのが最適であり、内部の関数単位のユニット テストや軽い統合テストに似ています。
Common Test は、統合とシステムのテスト、ブラックボックスのようなものなど、より重い作業を行います。もちろん、それはより複雑で、はるかに強力です。
作業中は、Erlang/OTP の別の統合テスト ツールである Dialyzer を試すこともできます。これは、デッド コードや到達不能コード、論理エラーと型エラーを見つけるのに優れています (これは静的型アナライザーです)。繰り返しになりますが、いくつかの erlangが優れた導入を提供していることを学びましょう: Dialyzer。
ところで、EUnit テストを別々のファイルに入れることを選択した場合 (これは完全に可能です)、エクスポートされていない関数をテストすることはできません (これは予想されることです)。また、Common Test は、エクスポートされていない関数をテストしないことも期待されています。それ以外の場合は、ブラックボックス テスト ツールにはなりません (不正行為の可能性があります)。
Eunit は非常にシンプルで、ホワイト ボックス レベルでのモジュール テストまたはライブラリ テストに非常に適しています。鉄筋に一体化されています。
Common Test は、ブラック ボックス テストとアプリケーションおよびアプリケーション テストのシステムをより重視しています。非常に簡単にテストカバレッジが付属しています。
編集(Andyのコメントの後):
ユニタリ ホワイト ボックス テストに共通テストを使用できるのは正しいことであり、フィクスチャを使用して一部のアプリケーション テストに eunit を活用できるのも正しいことです。
ただし、eUnit は単純なユニタリ テストには非常に便利です。関数 myFun を記述し、テスト関数 myFun_test またはテスト ジェネレーター myFun_test_ (一部のテストが途中で失敗した場合でも多くのパターンをテストするのに役立ちます) をテスト モジュールに追加するだけです。何度でも実行できます (テストの履歴はありません)。
共通テストでは、all 関数またはグループ内の各テスト ケースを一覧表示するよう求められます。私の知る限り、テストジェネレーターがないため、各関数のすべてのテストパターンを実行するのは簡単ではありません. それが、ユニタリー ホワイト ボックス テストにあまり適応していないと私が考える理由です。一方、init_per_testcase、init_per_group ... は、実行するアプリケーション コンテキストが必要な場合にテストを編成するために、eunit フィクスチャよりもはるかに柔軟です。Common Test は、実行されたすべてのテストの履歴をログ ディレクトリに保持します。これは便利ですが、有用性を維持するために実行回数を制限することをお勧めします。
編集:
関数がエクスポートされないという問題を回避するために、eunit と共通テストの両方で、定義を使用することができます。たとえば、rebar.config で (eunit テストに別のファイルを使用するため):
{eunit_compile_opts, [{d,'EUNIT_TEST',true}]}.
{erl_opts, [debug_info, warn_export_all]}.
必要に応じて、モジュール内で次のようにします。
%% export all functions when used in eunit context
-ifdef(EUNIT_TEST).
-compile(export_all).
-endif.
eunitのコンパイル済みコードのみを変更することを確認できます
D:\git\helper>rebar clean eunit compile
==> helper (clean)
==> helper (eunit)
Compiled test/help_list_tests.erl
Compiled test/help_ets_tests.erl
Compiled test/help_num_tests.erl
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
src/help_num.erl:6: Warning: export_all flag enabled - all functions will be exported
Compiled src/help_num.erl
Compiled src/help_code.erl
All 31 tests passed.
Cover analysis: d:/git/helper/.eunit/index.html
==> helper (compile)
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
Compiled src/help_num.erl
Compiled src/help_code.erl
http://www.erlang.org/doc/apps/common_test/basics_chapter.htmlから:
Common Test は、Erlang コードのホワイト ボックス テスト (モジュール テストなど) にも非常に便利なツールです。これは、テスト プログラムがエクスポートされた Erlang 関数を直接呼び出すことができ、基本的なテスト スイートの実装と単純なテストの実行に必要なオーバーヘッドがほとんどないためです。ブラックボックス テストの場合、たとえば、Erlang ソフトウェア、Erlang RPC、および標準の O&M インターフェイスを使用できます。