2011-11-02 4 views
7

私たちはPerlでさまざまな科学データフォーマットのパーサを書いています。最近私はすべてのフォーマットとサブフォーマットに対してparser_*.tファイルを持つテストスイートを追加しました。もちろん外部サブによって実行される追加のテストを計画するにはどうすればよいですか?

、パーサのAPIはまったく同じパース異なっをテストするために使用されているサンプルファイルから読み込まれたデータのみです。テストファイルを単純化するために、パーサーオブジェクトと予想されるデータを表すハッシュ構造を渡すサブを書きました。それは

my $parser = new MyApp::Parser($file); 
test_nested_objects = ($parser, { 
    property1 => "value", 
    property2 => 123, 
    subobject_accessor => { 
     property3 => "foobar", 
    } 
} 

ハッシュをウォークスルーし、ハッシュで定義されたすべてのプロパティのテストを実行しますtest_nested_objectsサブ、例えばのように見えますsubobject_accessorを呼び出すことができる場合は、オブジェクトを返し、そのオブジェクトはproperty3と呼びます。

*.tファイル全体で実行されたテストの数を確認し、すべて*.tファイルにtests => 123を追加しました。さて、いくつかのチェックをジェネリック関数に追加し、すべての計画が間違っています。

私の計画にサブテストを認識させるには?私は、次のことを実現したいと思います:

  • 個々のテストでは、サブを編集するとき
  • 総数は手で数字の無い変更→自動的に増加progessのビューのためにそれらを実行する前に、与えられたテストの

    • 数を私が実際に解析されたデータに間違っているかどうかを知る必要があるため、サブを隠すと0または1だけを返すことは受け入れられません)

    私はあなたが理解できれば分かりますか?長い話をして申し訳ありませんが、人々は何らかの背景知識なしではおそらく理解できないと考えました。

  • 答えて

    10

    最新のテスト計画の傾向は単純ではありません。テスト計画の

    done_testing(); 
    

    多くの用途は、テストスクリプトが完了したことを確認するためだけに存在します。あなたのテストファイルの最後に、あなたが最後に到達したことを宣言します。適切な数のテストを見た場合、スクリプトは最後までそれを完了していなければなりません。それは本当に真実ではありませんが、それは便利で実用的なフィクションです。

    あなたは、このようなデータ構造のサイズを測定するなどのテストの数を決定するために、いくつかの計算を行うその後​​を呼び出すことを行う必要がある場合:しかし、

    use Test::More; # don't declare the plan yet 
    
    my $test_count = ...; 
    
    plan tests => $test_count; 
    

    代わりに大きな計画を作ります、テストをサブテストに分割することができます。各サブテストは、それが実行されますどのように多くのテストを知っている必要があり、スクリプトは、サブテストの数を知っています

    subtest some_label => sub { 
         plan tests => $n; 
         ... 
         }; 
    

    テスト機能へのあなたの呼び出しのそれぞれが1つのテストだろう、と機能が使用しますそれを呼び出し側にあまりにも多く露出させることなく、何をしたいのかを行うためのサブテスト。

    0

    形式ごとのサブテストの数が知られている場合は、テスト::詳細を使用する前に、あなたはBEGINブロック内のテストの計算を行うことができます。

    関連する問題