2017-04-05 5 views
0

Junitには特別な注釈がありますが、自動的に使用時間を計算できますか?私は手動でこのように、時間を計算することを避けることができる場合: カスタムストップウォッチを実装するにはどうしたらいいですか?

long start = System.currentTimeMillis(); 
// do something here 
long end = System.currentTimeMillis(); 
log.info("took time: {}", end - start); 
assertTrue((end - start) > 1000L); 

は今、私はStopWatch感じ

が少し面倒です:

@Test 
@StopWatch 
public void test_sleep_1_seconds(){ 
    sleep1(); 
    assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1L); 
} 

方法:理想的には

@Rule 
public Stopwatch stopwatch = new Stopwatch() { 
    @Override 
    protected void succeeded(long nanos, Description description) { 
     logInfo(description, "succeeded", nanos); 
    } 

    @Override 
    protected void failed(long nanos, Throwable e, Description description) { 
     logInfo(description, "failed", nanos); 
    } 

    @Override 
    protected void skipped(long nanos, AssumptionViolatedException e, Description description) { 
     logInfo(description, "skipped", nanos); 
    } 

    @Override 
    protected void finished(long nanos, Description description) { 
     logInfo(description, "finished", nanos); 
    } 
}; 

、私はこの効果をしたいですカスタムStopWatchを実装できますか?

答えて

0

StopWatchは抽象的ですが、それはすべての抽象メソッドを持っていないので、あなたがそれらのすべてをオーバーライドする必要はありませんが、あなたはまだ匿名クラスをインスタンス化する必要があり、わずかに少ない面倒である:

@Rule 
public Stopwatch stopwatch = new Stopwatch() {}; 

@Test 
public void test_sleep_1_seconds() { 
    sleep1(); 
    assertTrue(stopwatch.runtime(TimeUnit.SECONDS) > 1); 
} 

実際には、#1110によれば、StopWatchは抽象的である必要はなく、通常のクラスに変更されます。これらのアップデートは、JUnit 4.13でリリースされる予定です。

あなたはすべての試験のためにこれをチェックする必要がある場合は、succeeded上書きする場合があります

@Rule 
public Stopwatch stopwatch = new Stopwatch() { 
    @Override 
    protected void succeeded(long nanos, Description description) { 
     assertTrue(runtime(TimeUnit.SECONDS) > 1); 
    } 
}; 
+0

感謝を!しかし、カスタムStopWatchアノテーション(MyStopWatch)を実装し、必要に応じてテストメソッドの上で直接使用する場合は、@ Test'' @ Before'と同じように 'junit'が何らかのクラスを実装することでサポートできますか? – zhuguowei

+0

@ zhuguowei可能です。あなたはカスタム(テストランナー)(https://github.com/junit-team/junit4/wiki/Test-runners)を実装する必要があると思います –

関連する問題