2012-03-22 15 views
2

私は、最も最近変更されたファイルをunixディレクトリから取得するスクリプトを作成しています。 私はそれが動作すると確信していますが、私はそれを証明するために単体テストを作成しなければなりません。Python、特定の順序でコマンドを実行する

問題はsetUp機能です。私は、ファイルがで作成された順序を予測することができるようにしたい。

self.filenames = ["test1.txt", "test2.txt", "test3.txt", "filename.txt", "test4"] 
newest = '' 
for fn in self.filenames: 
    if pattern.match(fn): newest = fn 
    with open(fn, "w") as f: f.write("some text") 

パターンがある「テスト。*。TXT」それだけで、リストの最初の3つに一致するようにします。複数のテストでは、「test3.txt」と「test1.txt」が返されることがあります。

+2

それは私にとって単体テストのようには見えません。ユニットテストでは、実際にディスクにファイルを書き込む必要はありません。 –

+0

質問の表現方法は少し曖昧です。このコードの 'newest'変数は、常に' self.filenames'リストの最後の項目を参照します。または、これは最も最近変更されたファイルを移動するスクリプトの動作についての質問ですか? – amcnabb

+2

[ユニットテスト](http://en.wikipedia.org/wiki/Unit_testing)ではなく、何らかの統合テストをここで作成しようとしています。ありがとう。 –

答えて

5

os.utimeを使用すると、作成したファイルに変更時刻を明示的に設定できます。そうすれば、あなたのテストはより速く実行されます。

+0

ああ。これが一つです。本当にありがとう。 – mehtunguh

4

私は、使用しているファイルシステムがファイル作成時に小数点以下の秒数をサポートしているとは思っていません。

time.sleep(1)への呼び出しをループに挿入して、ファイルシステムが実際に作成されたファイルごとに異なるタイムスタンプを持つようにすることをお勧めします。

+0

ありがとうございます。あなたが正しいです。ファイルシステムが同じタイムスタンプを与えているとは思っていませんでした。 – mehtunguh

+0

私は@ Lance-Helstenの答えが大好きです。あなたのスクリプトを数秒間保持することはできません。 – gahooa

0

同期が原因である可能性があります。特定の順序でファイルに対してwrite()を呼び出すだけであっても、データがその順序でOSによって更新されるわけではありません。

ファイルオブジェクトにf.flush()とそれに続いてos.fsync()を呼び出してみて、次のファイルに進みます。 (スリープ()を使用して)コール間にある程度の時間を与えることも役に立ちます