5

私のプログラムでは、SevenZipSharp を使用して zip ファイルを生成しています。SevenZipSharp は、別の DLL である 7z.dll をロードするマネージ DLL です。SevenZipCompressor.SetLibraryPath を使用して、SevenZipSharp のパスを 7z.dll に手動で設定しています。

プログラムをデバッグ モードで実行すると、これはすべて正常に動作し、必要に応じて適切な zip ファイルが生成されます。ただし、mstest で単体テストを実行すると、SevenZipSharp で常に次のエラーが表示されます。

テスト メソッドが例外をスローしました: SevenZip.SevenZipLibraryException: 7-zip ライブラリまたは内部 COM エラーを読み込めません! メッセージ: ライブラリのロードに失敗しました..

MSTest が、セキュリティ タイトなサンドボックスで実行するなど、SevenZipSharp が 7z.dll を読み込めないようにする何かを行っている可能性があると思われます (または何か。私は C# と MSTest を初めて使用します...)。

誰が何が起こっているのかについて考えを持っていますか?

ありがとうございました!

4

4 に答える 4

2

Process Monitor (aka procmon.exe)優れたSysInternalsツールを使用して、テストハーネス(MSTest)を監視することを検討してください。実行可能ファイルが7z.dllを探している場所が表示されます。

于 2011-08-30T22:03:10.473 に答える
0

単体テストに外部ライブラリを含めてもよろしいですか? 理想的には、外部のものをモックオブジェクトなどに置き換えるメカニズムが必要です。そのような外部ライブラリをテストすると、実際にテストが統合テストに変わるからです。

SevenZipSharp などの一般的なライブラリについては、適切にテストされていると想定でき、プログラムで正しく動作することを確認するために手動で統合テストを行うことができます。

依存関係の挿入、フレームワークのモックなどによってその依存関係を取り除き、単体テストで独自のコードのみをテストできるようにすることを検討します。

このような依存関係を簡単に置き換える方法のヒントについては、ファクトリ メソッドまたは抽象的なファクトリ デザイン パターンを調べてください。

独自の ICustomZipInterface を作成し、ラッパー パターンを使用して運用コードの zip ロジックをカプセル化することから始めることをお勧めします。単体テストで、そのラッパー クラスをダミーの実装に置き換えます。ダミーの実装は、たとえば、zip コンポーネントへのアクセス方法を記録し、その情報を使用して、zip ファイルが実際に作成されたかどうかを確認するのではなく、コードを検証できます。

于 2011-08-30T22:10:37.293 に答える