2

私はC#で次の設定をしています-コンストラクターでフォルダーパスを取得するコンポーネントがあり、後でいくつかの巨大なデータがそれによって処理され、いくつかのファイルの形式でディスクに書き出されます(約1Gbの大きさのオーダー、非常にIO集中的な)。取得時に、データが読み込まれ (これも IO が集中します)、単体テスト (MOQ を使用した nunit、実際にはコンポーネント テストとしてセットアップ) で元のデータと比較されます。問題 - 単体テストが完了するまでに数分かかり、非常に面倒です。テスト フィクスチャのセットアップで RAMDrive または RAMFolder を作成し、分解して削除する方法はあるのでしょうか。コンポーネントの外部では、どのファイルが正確に使用されているかを誰も知らないはずなので、メモリファイルまたはメモリストリームを使用できません。

何か案が?

よろしく、 ペトル

4

3 に答える 3

1
  1. SSD を入手する
  2. 単体テストを減らす
  3. 個別にテストされたサブコンポーネントでストレージ アクセスを抽象化し、メモリ内の配列を使用してファイルをシミュレートします。

これを行う3つの実行可能な方法。私は3を試してみます-それでもSSDを購入します。SSD は大量の小さな IO に最適であり、コンパイルとは何かを推測します (C# でさえ、大量のソース ファイル)。

于 2012-03-14T08:43:46.460 に答える
0

なぜあなたはテストの後にそれを壊す必要があるのですか?ユニットテスト後にすべてのファイルを空にしないのはなぜClassCleanupですか?

RAMdiskソフトウェアとして、 http: //www.superspeed.com/desktop/ramdisk.phpでRAMDisk11をチェックアウトすることをお勧めします。

もちろん、ファイルの実際の書き込みをモックアウトすることもできますね。

于 2012-03-14T08:40:14.167 に答える
0

ファイル名 (既存のコード用) とストリームを持つ 2 つの API を持つビジネス オブジェクトを使用しようとします。

ファイル API は、処理が行われる streamapi への呼び出しを変換する単なる薄いレイヤーです。

単体テストはストリーム API (つまり、メモリストリーム) を使用できますが、システム全体は fileapi を介してファイルストリームを操作します。

于 2012-03-14T08:55:44.737 に答える