2012-03-14 2 views
2

私はC#で次の設定をしています - コンストラクタでフォルダパスを取得するコンポーネントがあり、後でいくつかの巨大なデータが処理され、いくつかのファイル(約1Gb程度、IO集中的)取得時には、データが読み込まれ(IO強度も)、ユニットテスト(実際にはコンポーネントテストのようにMOQが設定されたnunit)が元のデータと比較されます。問題は、ユニットテストが完了するまでに数分かかりますが、これはかなり面倒です。私は、テストフィクスチャセットアップでRAMDriveまたはRAMFolderを作成して破棄して削除する方法があると考えました。私は、メモリファイルやメモリストリームを使用することはできません。コンポーネントの外部では、どのファイルが正確に使用されているかを知る必要はありません。I/Oユニットテストにメモリディスクを使用する

敬具、 ペトル

答えて

0

は、なぜあなたは、テストの後に、それを取り壊す必要があるでしょうか? ClassCleanupで単体テスト後にすべてのファイルを空にするだけではどうですか?

RAMディスクソフトウェアとして、RAMディスク11をhttp://www.superspeed.com/desktop/ramdisk.phpでチェックアウトしたい場合があります。

もちろん、ファイルの実際の書き込みを模倣することもできますか?

+0

を経由してファイルストリームと連携しながら、

ユニットテストは、ストリームAPI(すなわちのMemoryStream)を使用することができますが、それは、インストールを必要とします。私にとっては、複数のビルドサーバー(実際に私にとってはアクセスできない)とすべての従業員マシンにインストールする必要があるため、インストールを必要としないソリューションを得る方がはるかに良いでしょう。おそらくここで嘲笑のオプションを検索する必要があります... –

1
  1. は別個に試験のサブコンポーネントに離れたユニットテスト
  2. 抽象ストレージへのアクセスを削減SSD
  3. を取得...そしてメモリ内の配列を使用してファイルをシミュレートすることを欺きます。

これを実行する3つの方法があります。私は3と一緒に行くことを試みる - そしてまだSSDを購入する。 SSDは、小さなIOのもののトンに最適であり、コンパイルが何であるかを推測します(C# - たくさんのソースファイル)。

+0

SSDはいいですが、1人ではなく、1人の従業員(TDD、配信ポリシーの前にすべてのテストを実行します)と複数の構築サーバー - まだ);))私の決定レベル。単体テストのカットもここで問題になりません。サブコンポーネントレベルを追加することはおそらく私はこれを考慮する必要がありますが、それ以上のコンポーネントについては導入する必要があります。 –

+0

まあ、私は今devsのために120GBのssdですべてのディスクを置き換えます。プラス - 私のビルドサーバーはチェックインをゲートします(変更をトランクにマージする前にサーバーでビルドとテストを行います)。 – TomTom

+0

もし5000人のデベロッパーをすべてSSDに切り替えることができたら、少なくとも250人ほどのデポを出すように会社に納得させることができれば、私はもちろんゲームになるでしょう; –

0

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

ファイルapiは、処理が行われるstreamapiへの呼び出しを変換する単なる薄い層です。 woleシステムは、私はすぐにRAMディスクを調査したfileapi

関連する問題