問題タブ [mrunit]
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.
unit-testing - 単体テスト用の MR-Unit と JUnit の比較
JUnit と Mockito の使用と比較して、MR ジョブの単体テストに MR-Unit を使用する利点は何ですか?
具体的には、JUnit を使ってできることとできないこと、またははるかに難しいことは何ですか?
私の考えは、すべてのロジックをマッパー/リデューサーからヘルパー クラスに移動し、適切なメソッドがモックで呼び出されることを確認することです。
MRユニットを使用する理由
unit-testing - mrunitの後継は?
今日、ASF が mrunit を廃止したことを知りました ( https://blogs.apache.org/foundation/entry/the_apache_news_round_up85とhttps://issues.apache.org/jira/browse/HADOOP-3733およびホームページ自体を参照)。「無活動」以外に理由がなかったので、代替手段があるのではないでしょうか?
将来、mapreduce ジョブを単体テストするために、mrunit の代わりに何を使用することになっていますか?
configuration - 空の構成を返す MRUnit Context オブジェクト
MRUnit のヘルプが必要です。以下のように、構成ファイルを MapReduceDriver に追加しています。
レデューサー クラスが setUp() メソッドのプロパティにアクセスしようとすると、渡された構成ファイルから値を取得できません。
// この appNameListStr は null として返されます。
これに関する提案/ヒント。
java - MRUnit での特定の例外のテスト
TestNG (または JUnit) では、簡単です。次のようになります。
String x
したがって、上記のテストはパスnull
し、NullPointerException がスローされます。
しかし、MRUnit では、アサーションの動作が異なります。以下は、マッパー クラスのテスト メソッドです。
での入力を受け取り、でsomeData
の出力を期待しますsomeKey
。someData
しかし、不正なデータをフィードして の有効性をチェックする Try/Catch ブロックをカバーする必要があります。この場合、.withOutput
メソッドは必要ないようです。MRUnit で便利にテストする方法はありExceptions
ますか?
mapreduce - MRUnit を使用してテストする前に出力を微調整する
mapreduce2 を使用してアプリケーションを作成し、MRUnit 1.1.0 を使用して同じものをテストしています。テストの 1 つで、「現在のシステム時刻」を出力に入れるレデューサーの出力をチェックしています。つまり、リデューサーの実行時に、タイムスタンプが使用されcontext.write()
、残りの出力と共に書き込まれます。レデューサーで使用するのと同じ方法をテスト メソッドで使用してシステム時間を見つけたとしても、両方で計算される時間は通常、 と のように 1 秒離れてい2016-05-31 19:10:02
ます2016-05-31 19:10:01
。したがって、2 つの出力は異なることがわかります。例:
これにより、アサーション エラーが発生します。このタイムスタンプの違いを無視したいので、タイムスタンプ以外の残りの出力が一致すればテストはパスします。システム時間を返すために使用されるメソッドをモックする方法を探しています。これにより、ハードコードされた値が返され、リデューサーとテストの両方がテスト中にこのモックされたメソッドを使用します。これは可能ですか?どんな助けでも大歓迎です。
よろしくお願いします
編集:私はすでに私のテストでMockitoのスパイ機能を試しました:
ただし、これにより実行時エラーが発生します。
メソッドgetSysTime()
はパブリックかつ静的であり、クラスMClass
はパブリックであり、親クラスはありません。
java - java.lang.VerifyError: PowerMockRunner を使用している場合、ブランチでスタックマップ フレームが必要です
複数の出力をテストするために ReduceDriver を使用するために、プロジェクトで MRUnit バージョンを 1.1.0 にアップグレードしました。テストに変更を加えた後 (アップグレードで動作するようにするため)、次のエラーが発生します。
私のテストは次のようになります(これをより簡潔にするために意図的にコードを削除しました):
@PrepareForTest を使用するとエラーが発生します。myReducerクラスには static または final メソッドがないことに注意してください。そのため、 @PrepareForTest アノテーションには含まれていません。私のpomファイルの一部(ビルドにmavenを使用しています)は次のようになります。
また、私は Java 8 を使用しており、ここに記載されているように v7 または v6 にダウングレードできないことに注意してください: java.lang.VerifyError: Expecting a stackmap frame at branch target
ここに記載されているように、pomファイルにsurefireプラグインを追加しようとしました: java.lang.VerifyError: Expecting a stackmap frame at branch target 73
この場合、これらのソリューションはどれも機能しません。
java - Mrunit: MultiOutput テストの値コンパレータの設定方法
mrunit で MultiOutput をテストするためにキー/値コンパレータを設定する方法はありますか?
私の分析に基づいて: mrunit は、マルチ出力の期待値と実際の値の等価性をテストするためにキー/値コンパレータを使用しません。キー/値コンパレータは、単一出力のキーと値の比較にのみ使用されます。
TestDriverクラスには、期待される結果と実際の結果を比較する単一出力と複数出力用の個別のメソッドがあります。