Это общий вопрос, касающийся болтов и носиков модульного тестирования в топологии Storm, написанной на Java.
Каковы рекомендуемые методы и правила для модульного тестирования (JUnit?) Bolts и Spouts?
Например, я мог бы написать тест JUnit для Bolt
, но без полного понимания структуры (например, жизненного цикла Bolt
) и последствий сериализации легко допустить ошибку при создании несериализуемых переменных-членов на основе конструктора. В JUnit этот тест прошел бы успешно, но в топологии он не сработал бы. Я полностью полагаю, что есть много контрольных точек, которые нужно учитывать (например, этот пример с сериализацией и жизненным циклом).
Следовательно, рекомендуется ли при использовании модульных тестов на основе JUnit запускать небольшую имитацию топологии (LocalMode
?) И тестировать подразумеваемый контракт для Bolt
(или Spout
) в рамках этой топологии? Или можно использовать JUnit, но подразумевается, что мы должны тщательно моделировать жизненный цикл Bolt (создавать его, вызывать prepare()
, издеваться над Config
и т. Д.)? В этом случае, какие общие контрольные точки следует учитывать для тестируемого класса (Bolt / Spout)?
Что сделали другие разработчики для создания надлежащих модульных тестов?
Я заметил, что есть API тестирования топологии (см. https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/TestingApiDemo.java). Не лучше ли использовать какой-нибудь из этого API и выставлять «Тестовые топологии» для каждого отдельного Bolt
& Spout
(и проверять неявный контракт, который должен предоставить Bolt, например - его объявленные выходы)?
Спасибо