⛄️
JUnit 4.12から入ったTestRuleを軽く見てみる
DisableOnDebug
DisableOnDebug
は他のTestRule
をラップして、デバッグ実行されていないときのみラップしたTestRule
を適用します。
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.DisableOnDebug;
import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
public class HogeTest {
@Rule
public TestRule timeout = new DisableOnDebug(Timeout.seconds(1)); //1秒以上かかったら失敗とみなす
@Test
public void testHoge() throws Exception {
//test code
}
}
こんな感じでTimeout
と組み合わせる事が多い気がします。
コマンドライン引数に次のいずれかが含まれていればデバッグ実行されていると判断するようです。
-Xdebug
-agentlib:jdwp
デバッグ実行かどうかの判断はDisableOnDebug.isDebugging
メソッドをオーバーライドすればカスタマイズできます。
Stopwatch
Stopwatch
はテスト実行にかかった時間をSystem.nanoTime
メソッドで計測します。
import java.util.logging.Logger;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Stopwatch;
import org.junit.runner.Description;
public class FugaTest {
private static Logger logger = Logger.getLogger(FugaTest.class.getName());
@Rule
public Stopwatch stopwatch = new Stopwatch() {
@Override
protected void succeeded(long nanos, Description description) {
logger.info(() -> String.format("テストの実行に%,dナノ秒かかった", nanos));
}
};
@Test
public void test() throws Exception {
//test code
}
}
ロギング目的に使うのが多そうです。
Discussion