Я бы инкапсулировал часть, которую вы хотите протестировать, в объект, который вы можете подключить к специальным источникам и приемникам для тестирования, а также к действующим источникам данных / приемникам для производства.
Для тестовой раковины вы можете использовать это:
public static class TestSink<OUT> implements SinkFunction<OUT> {
// must be static
public static final List values = new ArrayList<>();
@Override
public void invoke(OUT value, Context context) throws Exception {
values.add(value);
}
}
Тогда ваши тесты могут сравнить значения раковин с ожидаемыми результатами.
Проще написать тесты, которые выполняют обработку времени события (по сравнению с теми, которые используют время обработки), поскольку со временем обработки результаты не являются детерминированными. И легче иметь тесты, которые выполняются с параллелизмом 1, также ради достижения детерминированных результатов.
Здесь вы найдете несколько примеров тестов .