Тайм-аут теста не работает для зависшего генератора случайных чисел

#java #unit-testing #timeout #freeze #secure-random

#java #модульное тестирование #тайм-аут #замораживание #безопасный-случайный

Вопрос:

Я написал тест, чтобы проверить, висит ли RNG

 public class StringUtilsTest {
    @Test
    @Timeout(value = 10)
    public void repeated_generateRandomStringOfDigits() {

        for (int i=0; i<5;   i) {
            StringUtils.generateRandomStringOfDigits(10);

            try {
                Thread.sleep(1);
            } catch (InterruptedException ie) {
                Thread.currentThread().interrupt();
            }
        }

    }
}
 

но это работает не так, как ожидалось: если RNG зависает, тест тоже зависает, игнорируя время ожидания.

Как это сделать?

Ответ №1:

Используйте это вместо @Timeout :

 @Rule
public Timeout timout = Timeout.millis(10000); // in milliseconds
 

Комментарии:

1. Выглядит глобально. Мне нужен тайм-аут только для одного теста.