2

このプロジェクトに単体テストを追加しようとしています: https://github.com/JimBobSquarePants/ImageProcessor

単体テストを実行すると、おそらく 1 ~ 2 分かかります (これは画像処理ライブラリであり、非常に高速になるとは思いません)。

問題は、これらのテストで OpenCover を実行すると、実行に 20 分ほどかかることです。

現在の単体テストの要点は、多数のテスト画像があり、各単体テスト (実際には統合テストに似ています) が各画像を読み取り、多数の効果を実行することです。

私は何か間違ったことをしていると思いますが、何ですか?NUnit runner よりも OpenCover の方が時間がかかるのはなぜですか?

4

2 に答える 2

1

私は OpenCover を使用していないため、これは憶測ですが、カバレッジ分析ツールは、通過するすべての行を計測することになっています。画像操作を行っているため、各ピクセルは確かにOpenCoverをトリガーして、一致するコード行で何らかの分析を行い、多くのピクセルがあります

OpenCover が 1 行のコードをインストルメント化するのに 0.01 ミリ秒かかるとします (これも純粋な憶測です)。1280*1024 の画像を操作しており、各ピクセルには 3 行のコードが必要です (赤のチャネル、x または緑と青など)。 、1310720 * 0.01 * 3 = 約 39 秒になります。1回のテスト用。

テストが 1 つしかないと思うので、これにテストの数を掛けます。遅い理由がわかるかもしれません。

おそらく、より小さな規模でアルゴリズムをテストしてみてください。画像全体の操作を行っていない限り (どの操作かわかりませんか?)、コードを実行するために画像全体を操作する必要はありません。または、小さい画像を使用しますか?


編集: ここでテスト スイートを見てみましたが、(もう一度、OpenCover 自体を知りません) 問題は、テストしているすべてのデータに起因していると言えます。すべての単一の画像が同じテスト用に読み込まれ、処理されます。これは、何かを単体テストする方法ではありません。

lib の Image クラスへの各イメージ タイプのロードをテストしてから、Image クラスからの1回のローテーション、1 回のサイズ変更操作などをテストします。毎回すべてをテストしないでください。


テストは必要なので、OpenCover オプションを調べて一部のデータを除外することもできます。おそらく、アルゴリズムの外側のシェルのみをインストルメント化してカバレッジ分析を改良すると役立つでしょう。フィルターを見て、許容できるように実行するために何を非表示にできるかを確認してください。

または、コード カバレッジを毎日、優先的に夜間に実行することもできますか?

于 2014-10-06T11:11:45.053 に答える