JUnit –タイムアウトテスト
テストが終了するまでに定義された「タイムアウト」よりも時間がかかる場合、TestTimedOutException
がスローされ、テストは失敗とマークされます。 次の例を参照してください。
P.S Tested with JUnit 4.12
1. タイムアウトの例
このtimeout
の例は、単一のテストメソッドにのみ適用されます。 また、タイムアウト値はミリ秒単位です。
TimeoutTest.java
package com.example; import org.junit.Test; public class TimeoutTest { //This test will always failed :) @Test(timeout = 1000) public void infinity() { while (true) ; } //This test can't run more than 5 seconds, else failed @Test(timeout = 5000) public void testSlowMethod() { //... } }
このタイムアウトテストは、メソッドのパフォーマンスをテストするのに役立ちます。
2. グローバルタイムアウトルールの例
この例では、グローバルタイムアウトルールを作成する方法を示します。このルールは、クラス内のすべてのテストメソッドに適用されます。
TimeoutTest.java
package com.example; import org.junit.Rule; import org.junit.Test; import org.junit.rules.Timeout; import java.util.concurrent.TimeUnit; public class TimeoutRuleTest { //global timeout rule @Rule public Timeout globalTimeout = Timeout.seconds(1); //This test will be failed, because it will take more than 1 second to finish! @Test public void testSlowMethod1() throws InterruptedException { //... TimeUnit.SECONDS.sleep(5000); } //passed @Test public void testSlowMethod2() { //... } }
上記の例では、グローバルTimeout
ルールが宣言されており、testSlowMethod1()
とtestSlowMethod2()
の両方が1秒以内にテストを終了する必要があります。そうしないと、テストは失敗します。
P.S The rule also applies on @Before
and @After
methods.
Note
すべての単体テストは高速である必要があり、このグローバルタイムアウトルールが最善の助けになるはずです。