Scio тестирование не доступных счетчиков
Я строю некоторые тесты вокруг моего конвейера, и, в частности, у меня есть две ветви (одна, где рассматриваются ошибки, другая, где успехи), со стороны ошибок, у меня есть увеличивающийся счетчик (ScioMetrics.counter("MetricName").inc()
) и при построении тестов для другой ветви я хочу утверждать, что счетчик ошибок равен 0.
JobTest.
...
.counter(ScioMetrics.counter("MetricName"))(_ shouldBe 0)
...
Я получаю NoSuchelementException
когда тест успешно выполняется с сообщением, объясняющим, что метрика не была найдена, поскольку к ней, возможно, не был получен доступ внутри конвейера, что нормально, поскольку я могу утверждать, что исключение повышено, но. Разве не должно быть "более хорошего" способа проверить это?
Спасибо!
1 ответ
Из-за структуры API Beam Metrics счетчик, который не затрагивается в преобразовании, произведет NoSuchElementExcception
так как имя никогда не зарегистрировано.
использование ScioContext#initCounter
чтобы обойти это. Это в основном работает пустышка map
преобразовать для инициализации каждого счетчика на 0. https://github.com/spotify/scio/blob/master/scio-core/src/main/scala/com/spotify/scio/ScioContext.scala