Как писать тесты на время выполнения многопоточного кода [закрыто]

У меня есть многопоточный код, который обрабатывает список заданий с ExecutorService и некоторыми потоками внутри. Я хочу написать тестовый пример, который гарантирует, что это займет меньше определенного времени. Проблема в том, что этот код работает полностью асинхронно, поэтому просто выполняю end-старт не принесет никакой пользы.

Как я могу подойти к этой проблеме?

2 ответа

Это может помочь.

      import org.junit.Assert;
import org.junit.Test;

import java.util.concurrent.*;

public class MultiThreadedTest {
    private final ExecutorService executor = Executors.newFixedThreadPool(10);

    private Callable<Boolean> getCallable(Long sleepMillis) {
        return () -> {
            try {
                Thread.sleep(sleepMillis);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return true;
        };
    }

    @Test
    public void pass() throws InterruptedException, ExecutionException, TimeoutException {
        Future<Boolean> future = executor.submit(getCallable(1000L));
        Assert.assertTrue(future.get(2000, TimeUnit.MILLISECONDS));
    }

    @Test
    public void fail() throws InterruptedException, ExecutionException, TimeoutException {
        Future<Boolean> future = executor.submit(getCallable(3000L));
        Assert.assertTrue(future.get(2000, TimeUnit.MILLISECONDS));
    }

    @Test
    public void failCheck() {
        Assert.assertThrows(TimeoutException.class, () -> {
            Future<Boolean> future = executor.submit(getCallable(3000L));
            Assert.assertTrue(future.get(2000, TimeUnit.MILLISECONDS));
        });
    }
}

Если ваш код работает асинхронно, ваш тестер тоже должен быть асинхронным. Можете ли вы каким-либо образом проверить, завершены ли работы? Если это так, тестер должен запускать и периодически проверять статус заданий (например, каждую минуту), но это не должно продолжаться в течение заранее определенного тайм-аута - в случае зависания любого из асинхронных заданий.

Другие вопросы по тегам