3

ディスクから大量のデータを読み取る必要があるアプリケーションにテスト駆動開発を使用しようとしています。問題は、データがファイルシステム上でやや複雑なディレクトリ構造で編成されていることです (私のせいではありません)。私がテストしているメソッドでは、メソッドを完了するために、複数の異なるディレクトリに多数のファイルが存在することを確認する必要があります。

私が回避しようとしている解決策は、すべてのデータを含む既知のフォルダーをハード ドライブに置くことです。このアプローチにはいくつかの理由があります。理由の 1 つは、単体テストを別のコンピューターで実行したい場合、大量のデータを別のコンピューターにコピーする必要があることです。

setup メソッドでダミー ファイルを生成し、teardown メソッドでクリーンアップすることもできます。これに関する問題は、既存のディレクトリ構造を複製し、それらのディレクトリに大量のダミー ファイルをダンプするコードを記述するのが面倒なことです。

ファイル I/O 操作を単体テストする方法は理解していますが、この種のシナリオを単体テストするにはどうすればよいですか?

編集:実際にファイルを読み取る必要はありません。アプリケーションは、ディレクトリ構造を分析し、そこに存在するファイルを特定する必要があります。そして、これは多数のファイルを含む多数のサブディレクトリです。

4

4 に答える 4

4

やなど、ファイル システムを模倣するインターフェイスのセットを定義し、Test Doubleを使用してメモリ内のディレクトリ構造の表現を作成します。IDirectoryIFile

これにより、その構造を心ゆくまで単体テスト (および変更) することができます。

また、その目的のために、実際の BCL クラスを使用してこれらのインターフェイスを実装する具体的な実装も必要になります。

これにより、データ構造とデータ アクセスを互いに独立して変更できます。

于 2010-02-19T16:06:50.450 に答える
1

うわー、それは獣のように聞こえます。私は自分自身をテストすることに手を出しています。

あなたの質問の主な焦点は、「ファイルが存在することを確認する方法をテストできるように、多数のファイルを設定するにはどうすればよいですか?」ということのようです。

あなたはいくつかの可能な解決策に言及しています。あなたは、データを別のコンピューターにコピーするプロセスを実行する必要がないため、ハード ドライブにテスト データでいっぱいのフォルダーを単純に置きたくないとおっしゃいましたが、これは理解できます。

また、ダミー ファイルを生成するメソッドを作成できるとも述べていますが、データ構造を複製するのは面倒です。

Roy Osherove はThe Art of Unit Testingで、プロジェクトが維持され、バージョン管理されるように、テスト コードを維持し、バージョン管理することは素晴らしい考えだと述べています。

一貫性を保つために、ダミー データを作成し、テスト コードと共に何らかのソース管理リポジトリに配置することは理にかなっていると思います。そうすれば、ダミー データを別のコンピューターにコピーするプロセスを合理化でき、どのダミー データがどのマシンにあるかを追跡する必要がなくなります。それは苦痛でしょう!

私の解決策:ダミーデータをソース管理に配置します。

于 2010-02-19T16:10:43.697 に答える
1

これには Python の視点があります。あなたは Python で作業していないかもしれませんが、答えは多かれ少なかれほとんどの言語に当てはまります。

os外部リソース (モジュールなど) を使用した単体テストでは、外部リソースをモックアウトする必要があります。

問題は「どうやってモックアウトするのos.walk?」(またはos.listdir、使用しているものは何でも。)

  1. 関数のモック バージョンを作成します。 os.walk例えば。モックアウトされた各バージョンは、アプリケーションを実行できるように、ディレクトリとファイルのリストを返します。

    これを構築する方法は?

    実際のデータを処理する「データ グラバー」をos.walk作成し、テストに使用できる非常に古い応答のフラット リストを作成します。

  2. モック ディレクトリ構造を作成します。「既存のディレクトリ構造を複製するコードを書くのは面倒だ」というのは、通常は当てはまりません。モックされたディレクトリ構造は、名前の単純なリストです。痛みは全くありません。

このことを考慮

def setUp( self ):
    structure= [ 
        "/path/to/file/file.x", 
        "/path/to/another/file/file.y", 
        "/some/other/path/file.z",...
    ]
    for p in structure:
        path, file = os.path.split( p )
        try:
            os.makedirs( path )
        except OSError:
            pass
        with open( p, "w" ) as f:
            f.write( "Dummy Data" )

に必要な作業はこれだけですsetUptearDown似ている。

于 2010-02-19T16:14:55.813 に答える
0

考えられる解決策は、セットアップ方法が展開する tar ファイルからダミーのファイルとディレクトリ構造を作成することです。

于 2010-02-19T16:11:41.193 に答える