1

データの要約に使用できるモジュールを書き始めました。私はテストに不慣れで、見つけたものを読んでグーグルで検索しましたが、意味のある入力データを必要とするメソッドとサブを最適にテストする方法についてのアドバイスを見つけることができませんでした(たとえば、約100行を使用するとします)タブ区切りのテキストファイルの)。

ディストリビューションにテキストファイルを含めるだけでいいですか?Text :: CSVをチェックしましたが、それがそこで行われている方法です。

何かアドバイス?

どうもありがとう

4

1 に答える 1

2

Test::Moreをテスト フレームワークとして使用し、インライン データを埋め込むことを組み合わせて使用​​することをお勧めします。

Test::MorePerl の標準テスト ツールキットです。あなたが見つけるかもしれないほぼすべてのテストツールがそれを使用しています。多くの便利な組み込みテスト機能が付属しています。

一般に、サブルーチンまたはツールが実際に与えた値と期待値を比較することによって、テストを行います。これを行う最も一般的な方法は、isルーチンを使用して直接比較することです。フォーマットは次のようになります。

is($got, $expected, $test_name);

たとえば、POW 関数を作成し、それが機能していることを確認したいとしましょう。

sub pow { my ($n, $p) = @_;  return $n ** $p; }

これを次の方法で確認します。

is( pow(2, 3), 8, "2^3 is 8" );
is( pow(2, 4), 16, "2^4 is 16" );
is( pow(3, 3), 27, "3^3 is 27" );

あとは、必要なデータを便利な形式で取得するだけです。Heredocs を使用して、テスト関数呼び出しで小さなデータをインラインで読み込むことができます。

my $test1 = <<'END_DATA1';
... (your data here
END_DATA1

my $test2 = <<'END_DATA2';
... (your second dataset here
END_DATA2

__DATA__または、1 つの大きなデータ セットの複数の部分をチェックする必要がある場合は、すべてをブロックに入れることを検討してください。

while (my $line = <DATA>) { ... } # read from the DATA handle

# ... your script above here; everything below __DATA__ is read from the handle
__DATA__  
... ( your data set here )

たとえば、サブルーチンが行を正しく読み取るようにしたい場合は、次のようになります。

use strict;
use warnings;
use Test::More;

use Your::Lib;  # load your library with your routines in it

use Test::More tests => 5; # how many checks you will perform, in case it dies

my $lib = your_lib_function(\*DATA);  # say, it loads from a file handle maybe?

is( $lib->key1(), 'value', "Key 1 was read correctly.");
is( $lib->key2(), 'value2', "Key 2 was read correctly.");
is( $lib->key3(), 'value3', "Key 3 was read correctly.");
is( $lib->key4(), 'value4', "Key 4 was read correctly.");
is( $lib->key5(), 'value5', "Key 5 was read correctly.");

__DATA__
{
    "Key" : "value",
    "Key2" : "value2",
    "Key3" : "value3",
    "Key4" : "value4",
    "Key5" : "value5",
}

Test::Moreこのフレームワークの仕組みの詳細については、 を参照してください。幸運を!:)

于 2013-01-09T23:14:51.877 に答える