Тестирование с Thread.sleep

Это не просто вопрос факторинга числа - определение всех факторов числа? Можно тогда решить, нужны ли Вам все комбинации одного или нескольких факторов.

Так, один возможный алгоритм был бы:

factor(N)
    divisor = first_prime
    list_of_factors = { 1 }
    while (N > 1)
        while (N % divisor == 0)
            add divisor to list_of_factors
            N /= divisor
        divisor = next_prime
    return list_of_factors

тогда ваше дело комбинировать факторы для определения остальной части ответа.

8
задан notnoop 8 December 2009 в 17:44
поделиться

3 ответа

Обычно рекомендуется делегировать функциональность, связанная со временем, в отдельный компонент. Это включает получение текущего времени, а также задержки, такие как Thread.sleep (). Таким образом, можно легко заменить этот компонент на макет во время тестирования, а также переключиться на другую реализацию.

13
ответ дан 5 December 2019 в 06:38
поделиться

Настройте время ожидания с помощью установщика и укажите значение по умолчанию. Поэтому в своих модульных тестах вызовите установщик с небольшим аргументом (например, 1), а затем выполните метод, который вызовет Thread.sleep () .

Другой аналогичный подход - сделать, если настраиваемый через логическое значение, так что Thread.sleep () вообще не вызывается, если для логического установлено значение false .

3
ответ дан 5 December 2019 в 06:38
поделиться

Создайте некоторый тип задержки повтора, который представляет политику для задержек повтора. Вызов некоторого метода для типа политики для задержки. Смейтесь как хотите. Нет условной логики или истина / ложь флаги. Просто введите нужный тип.

В ConnectRetryPolicy.java

public interface ConnectRetryPolicy {
    void doRetryDelay();
}

В SleepConnectRetryPolicy.java

public class final SleepConnectRetryPolicy implements ConnectRetryPolicy {
    private final int delay;
    public SleepConnectRetryPolicy(final int delay) {
        this.delay = delay;
    }

    @Override
    public void doRetryDelay() {
        try {
            Thread.sleep(delay);
        } catch (InterruptedException ie) {
            log.error("connection delay sleep interrupted", ie);
        }
    }
}

В MockConnectRetryPolicy.java

public final class MockConnectRetryPolicy implements ConnectRetryPolicy {    
    @Override
    public void doRetryDelay() {
        // no delay
    }
}
2
ответ дан 5 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: