Поскольку мы все надеемся, что это плохая практика, в общем, есть исключения.
Чтобы утверждать очевидное, мы говорим не о модульных тестах, а об интеграционных тестах (JUnit, возможно, не является подходящим инструментом для работы, но я не нашел ничего лучше)
Я также делаю тесты Selenium. Я выполняю интеграционное тестирование на стороннем тестовом сервере, поведение которого является случайным, если я запускаю тесты без sleep ().
Это одно из возможных решений, обратите внимание, что это было проверено только один раз:
public class SleepySuite extends Suite {
private final Logger log = LoggerFactory.getLogger(SleepySuite.class);
private final Integer defaultSleepSec = 0;
private final Integer sleepSec;
public SleepySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(klass, builder);
sleepSec = initSleep(klass);
}
private Integer initSleep(Class<?> klass) {
SleepSec ts = klass.getAnnotation(SleepSec.class);
Integer sleep = defaultSleepSec;
if (ts != null) {
sleep = ts.value();
log.debug("Configured with sleep time: {}s", sleep);
}
return sleep;
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface SleepSec {
public int value();
}
/**
* @see org.junit.runners.Suite#runChild(org.junit.runner.Runner, org.junit.runner.notification.RunNotifier)
*/
@Override
protected void runChild(Runner runner, RunNotifier notifier) {
super.runChild(runner, notifier);
//Simply wrapped Thread.sleep(long)
TestUtils.sleep(sleepSec);
}
}
Ваш люкс exmaple:
@RunWith(SleepySuite.class)
@Suite.SuiteClasses({
Some.class,
SomeOther.class
})
@SleepySuite.TimeoutSec(30)
public class YourSuite{
}