2011-01-05 46 views
14

次の問題があります。NUnitにタイムアウト属性があることを知っています。私の問題は、ユニットテストが実際には、凍結されてもNUnitによって殺されることのない新しいプロセスを生成するということです。実際に不正なプロセスを取り除くタイムアウトを実装するにはどうすればよいですか?NUnitでの個別テストのタイムアウト

おかげで、 R.

答えて

11

あなたは、全体の試験方法のためのアサーションのタイムアウト、代わりのタイムアウトを使用することができます。

Assert.That(actual, Is.EqualTo(expected).After(5000, 50)); 
+0

絶対に素晴らしい。その後、スレッドをクリーンアップすることができます。 – ashes999

+0

これは私のシナリオではうまくいきませんでした。別のプロセスを生成し、ダイアログをポップアップして、ボタンをクリックしない限り、NUnitはそれを殺すことはありません。 –

+1

さて、受け入れテストは行っていません。 のようなものを使用するようアドバイスします。1)白http://white.codeplex.com/Thread/View.aspx?ThreadId=85842&ANCHOR 2)NUnitフォームhttp: //nunitforms.sourceforge.net/ 両方ともウィンドウを作成し、ボタンを押すのに適しています。 –

3

編集:受け入れ答えが良いものです。

テスト最終的にタイムアウト(ご希望より後はあるが)場合、あなたは常にMaxTime属性を使用することができます:http://www.nunit.org/index.php?p=maxtime&r=2.5.1を、スレッド、自分自身をクリーンアップ:

[Test, Maxtime(2000)] 
public void TimedTest() 
{ 
    ... 
} 

そうでない場合は、あなたの最良の選択肢を実装するかもしれません独自のタイミングメカニズムタイマー(またはビジー中のループ)を使用し、タイムアウトを超えた場合は、プロセスを強制終了します(テスト中に一般的な場合はShutDownメソッドである可能性があります)。

NUnitタイムアウトには、テストがタイムアウトした後でコードを実行できるイベントはありません。あなたは自分自身をロールバックしなければなりません。

+0

おそらく私は第2の道を進む必要があります。例として、生成されたプロセスがビルドマシン上でメッセージをポップすると、誰もそこをクリックすることはありません.NUnitのタイムアウトは決してキックオフされません。 –

+0

ビルドコードサンプル:[Test、MaxTime(2000)] – razon

0

OK。私がNUnitで構築したすべての機能を試してみて、私が必要としていたことを達成できなかったので、私は次のようにしました:私は、フィクスチャ・レベルで[SetUp]属性に設定されているタイマーを追加しました。各テスト。テストが終了する前にタイマーがチェックされている場合は、タイマーコールバックでクリーンアップを行います。

0
[Test, Timeout(2000)] 
public void PotentiallyLongRunningTest() 
{ 
    ... 
} 

http://www.nunit.org/index.php?p=timeout&r=2.5.1

はTimeoutAttributeは、テストケースのためのミリ秒単位のタイムアウト値を指定するために使用されます。テストケースが指定された時間より長く実行されると、テストケースは直ちに取り消され、失敗として報告され、タイムアウトを超えたことを示すメッセージが表示されます。

アトリビュートは、フィクスチャまたはアセンブリで指定することもできます。この場合、下位テストケースのデフォルトのタイムアウトを示します。

関連する問題