2011-08-10 4 views
2

テストを実行するとこれが表示されますが、どちらのテストもOKです。私はこれがまったく好きではありません。警告をエラーにするにはどうすればよいですか?Perlテスト - コンパイルの警告が表示されても、すべてが正常であることを頑強に示しています。

1..2 
Allowing a native trait to automatically supply a default is deprecated. You can avoid this warning by supplying a default, builder, or making the attribute required at UserInfo.pm line 7 
     require UserInfo.pm called at (eval 4) line 2 
     main::BEGIN() called at UserInfo.pm line 0 
     eval {...} called at UserInfo.pm line 0 
     eval 'package main; 
use UserInfo @{$args[0]}; 
1; 

;' called at /packages/run.64/perl-5.14.1/lib/5.14.1/Test/More.pm line 885 
     Test::More::_eval('package main;\x{a}use UserInfo @{$args[0]};\x{a}1;\x{a}', 'ARRAY(0x16fa110)') called at /packages/run.64/perl-5.14.1/lib/5.14.1/Test/More.pm line 860 
     Test::More::use_ok('UserInfo') called at UserInfo.t line 7 
ok 1 - use UserInfo; 
ok 2 - require UserInfo; 

答えて

3

警告をエラーにしますか?はい、どうぞ!

use warnings FATAL=>"all"; 

スクリプトだけで死ぬことはなく、特定のテストに失敗しないようにしたい場合は、上記にこれを追加することができます。

use Test::Exception; 

# later 
lives_and { 
    is ($this->value, 42); 
} "Value is 42 (and no warnings)"; 

Test::Exceptionを参照してください。

さらに別の方法(私は以下のコメントで述べたように)警告擬似シグナルハンドラを定義している:

my @warn; 
$SIG{__WARN__} = sub { push @warn, shift; }; 

# later 
ok ([email protected], "No warnings were emitted"); 
+0

'警告を使用するFATAL =>" all ";'で十分ではありません。 –

+0

@Let_Me_Be: 'eval'はここで例外をブロックしているに違いありません。私はこれを回避する良い方法を知らない。おそらく 'my @warn; $ SIG {__ WARN__} =サブ{プッシュ@ワーン、シフト; }; 'そして' ok(!@warn) 'を実行します。しかし、これはモジュールでオーバーライドすることができます。 – Dallaylaen

3

廃止予定の機能はまだ動作しますが、彼らは消えてしまうことをあなたに知らせます。推奨されていない機能の使用を停止して警告を取り除く。

コードが警告なしで実行されることをテストするには、Test::NoWarningsを試してください。

+0

?だから 'Test :: More'は廃止されましたか?交換は何ですか? –

+0

パニックになる前にTest :: NoWarningsを見ましたか? :) –

-1

は私も警告の場合にエラーを報告するためのテストを強制し、それでも警告自体を出力します

この$SIG{__WARN__} = sub { warn $_[0]; die };を使用して終了しました。

+0

なぜ警告しますか?ちょうど死ぬ。プログラムを停止しても、エラーメッセージが表示されます。しかし、Dallaylaenはあなたにいくつかのより良い選択肢を与えました。 –

+0

@brianいいえ、dieを使うだけではエラーメッセージが表示されません。 –

+0

あなたは印刷したいメッセージで死んでしまいます。警告は必要ありません。ダイ上のドキュメントを読んでください。さらなる発言をする前に、何かに関するドキュメントを読んでください。 –

関連する問題