2012-02-02 11 views
4

setupまたはteardownで実行される可能性のある高価な操作が、すべてのテストで同じで、テスト実行中に結果が乱されないと仮定します。 1回のテストの前後にそれらを実行させるのは私にとっては正しいことではないようです。RubyのTest :: Unit :: TestCaseですべてのテストの一般的なセットアップとティアダウンのロジックを定義するには?

セットアップ/ティアダウンコードは、最初のテストが実行される前と最後のテストが実行された後でのみ実行するのが好ましい方法はありますか?

編集は:ので、私が働いている特定の場合には、ネットにいくつかの拡張機能をテストする必要があります:: FTPとは、FTP接続を確立し、テストのためのいくつかのリモートオブジェクトを設定します:アンドリューへ

class TestFTPExtensions < Test::Unit::TestCase 
    def setup 
    # Setup connection 
    @ftp = Net::FTP.new 'localhost', 'anonymous' 
    @ftp.passive = true 

    # Create remote test directory 
    @ftp.mkdir 'dir' 

    # Create remote test file 
    path = File.join Dir.tmpdir, 'file' 
    File.open path, 'w' do |f| 
     @ftp.put f 
    end 
    File.delete path 
    end 

    def teardown 
    @ftp.rmdir 'dir' 
    @ftp.delete 'file' 
    @ftp.close 
    end 

    # imagine some tests here that don't change/remove any remote objects 

end 
+0

セットアップコードの機能によって異なります。それがデータベースに物事を加えるなら、フィクスチャ/工場が道のりです - 少なくともその一例です - あなたが取っている行動についてもっと具体的にする必要があります。また、実際の範囲外のテスト(たとえば、外部APIへの接続の確立)を行っている可能性もあります。同様のケースでは、モック、スタブなどを使用してそのようなものをシミュレートする必要がありますそれはあなたが実際にテストしているものの外にあります。 – jefflunt

+0

@normal私は特定のシナリオに関する情報を追加しました。それでも、一般的なセットアップのようなものがさらに便利になる、さまざまなシナリオを想像することができます。備品、工場、モック、スタブについて:あなたがこれらの話題に関するいくつかのリンクを思いつくことができるなら、あなたが話していることを知っているので助けになるでしょう^^ – raphinesse

+0

私はこの質問が以前に尋ねられたと思います。あなたは "testunit"とタグ付けされた質問をブラウズすることでそれを見つけることができるかもしれません。 –

答えて

4

感謝を私はこのhere on stackoverflowへの答えを見つけました。

しかし、私はまた、1.9.xブランチで標準テストフレームワークがMiniTestに切り替えられたことに気付きました。だから、実際には私は今テストのためにそれを使用しています。 This answerはMiniTestで同じことを達成する方法を説明しています。

関連する問題