2009-11-11 6 views
13

Perlではすべてのテストをtディレクトリに貼り付けることが習慣になっています。単体テストを機能的なものからどのように分離しますか?あるいは、質問をより簡単でより明白にするために、実行しないテストと実行しないテストとを迅速に分離するにはどうすればよいですか?すべてのテストが一緒に実行されると、テストは日常的に開発に使用されるには時間がかかりすぎてしまいます。さまざまな種類のPerlテストを分離することで、それらをすべて実行する必要はありませんか?

私はQUICK_TESTのようないくつかの環境変数を設定し、その値に応じて長いテストをスキップできると考えました。ユニットテストと機能テストを分けていますか?どうやって? (これは、世論調査であることを意図するものではない - 私はおそらくいくつかの慣用的な解決策があると思った。)


更新:これまでのところ、私はこれに来ています

package Test::Slow; 

use strict; 
use Test::More; 

BEGIN { 
    plan(skip_all => 'Slow test.') if $ENV{QUICK_TEST}; 
} 

1; 

、近くに.tファイル:

# This is a slow test not meant 
# to run frequently. 
use Test::Slow; 
use Test::More; 

うまくいくようです。

P.S. CPANでTest::Slowとして入手可能です。

答えて

7

あなたは確かにどのような分類スキームを使っても、tの下のサブディレクトリにテストを分けることができます。環境変数を使用する場合、すべてのテストを実行するようにデフォルトを設定することをお勧めします(変数が設定されていない場合)。私は、t /が開発中に日常的に実行されるテストだけを含み、他のテストが別のディレクトリ(例えば、t-セレン/)の下に置かれる状況を見てきました。

私はそれがあなたが作る選択よりも一貫性がより重要になると思います。あなたが一貫していれば何でもうまくいくでしょう。

3

通常、著者専用テストは、xtディレクトリに置かれます。それらは手動で実行されます。だから、長時間のテストが著者専用の場合は、xtを使用してください。一般に、tは、CPANモジュールでは一般的です。私的使用のために、好きな場所に置くことができます。

+0

「通常」かどうかわかりません。環境変数の使用、ディレクトリの分離、モジュール(Test :: Pod :: Coverageなど)がインストールされていない場合はテストをスキップし、ハードコードされたユーザー名またはディレクトリのチェックさえも確認しました。モジュール上で作業している著者以外の誰もがこれらをすべて、ある程度、または障害物として見ており、人々は気にしないことを望みます。作成者のみのテストでは、実行するのに費用がかかることはほとんどありません。 – ysth

10

.proveにいくつかの情報を追加するには、一度prove --state=all,saveを実行してください。

マルチコアマシンをお持ちの場合は、prove --state=slow -j9を実行して、同時にテストを実行することができます。 これは、最も長いランニングテストを最初から開始するので、他のすべてのテストが完了する前に終了する可能性が高くなります。これにより、テストの実行を妨げることなく、全体の完了までの時間を短縮できます。

+0

テストの中には、マルチコアマシンであっても日常的に使用するには時間がかかりすぎますが、 'prove'のヒントは面白いです。ありがとうございます。 – zoul

2

Test::Manifestには、各テストファイルにレベルを割り当てる方法があります。テスト・レベルがそのしきい値を超えている場合にのみ、テスト・ファイルが実行されます。 loweレベルは、すべての時間を実行したいもの、次のレベルはやや遅いものなどです。

しかし、私はそれをほとんど使用していません。私はシステムの一部に集中していた場合、私はちょうどその部分のためにテストを実行します。

% perl -Mblib t/some_test.t 

一部の人々は同じことを行うためにproveを使用したいです。

私の変更が何か他のものに壊れていないかどうかを確認するために、統合テストが必要なときにのみ、完全なテストスイートを実行します。

関連する問題