タイムアウトはJUnitの5に超えた後どのようにテストに失敗するには?

粘土の瓶:

JUnitの4に「タイムアウト」注釈パラメータは、一定時間後に停止するためのテストを強制するために使用することができます。

@Test(timeout=100)
public void infinity() {
   while(true);
}

どのようにこれはJUnitの5で行うことができますか?

密接に関連する(およびコードから取ら)注釈タイプのテストのタイムアウトパラメータが、JUnitの5ました。

davidxxx:

厳格な同等のtimeout属性は、宣言され@Timeoutた注釈。
JUnitの5のドキュメントから

@Timeout注釈は1つが、その実行時間が所定時間を超えた場合、試験、試験工場、試験テンプレート、またはライフサイクル・メソッドが失敗したことを宣言することを可能にします。秒までの期間のデフォルトの時間単位が、設定可能です。

例えば ​​:

@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void infinity() { 
  // fails if execution time exceeds 100 milliseconds
  //...
}

Assertions.assertTimeout()そして、Assertions.assertTimeoutPreemptively()JUnitの5で導入された新しい概念である(JUnitの4には存在しません)。これらは、に代替されている@Timeoutこれらの中で定義された:ステートメントの特定のセットにタイムアウトを狭めるExecutableかにSupplierパラメータとして渡されました。
(非常に近い名前を持つ)これらの2つの方法は、微妙な違いと同じ全体的な目標に取り組みます。
assertTimeoutPreemptively()先制中止しExecutable/Supplierている間にタイムアウトが発生した場合assertTimeout()しません。
それを達成するために、assertTimeoutPreemptively()提供実行Executable/Supplier呼び出し元のコードの中には別のスレッドでassertTimeout()同じスレッドで実行され、それは。

公式ドキュメントからの警告:コード/ライブラリに依存するjava.lang.ThreadLocalテスト実行セットアップ/ティアダウンのためのストレージが持つ望ましくない副作用がありassertTimeoutPreemptively()それは別のスレッドで提供文を実行するのでを。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=231450&siteId=1