Я бы хотел провести модульное тестирование gen_fsm, который использует довольно большую запись для своего состояния. Запись определяется в файле erl, который также определяет gen_fsm и, таким образом, (насколько мне известно) не виден другим модулям.
Возможные подходы:
- Поместите запись в файл hrl и включите ее в оба модуля. Это нормально, но код, который логически принадлежит gen_fsm, распространяется по нескольким файлам.
- Подделка записи с необработанным кортежем в модуле модульного тестирования. Это было бы довольно уродливо, так как запись уже превышает 20 полей.
- Экспортируйте функцию из моего gen_fsm, которая преобразует проплист в правильный тип записи с некоторой магией record_info. Хотя это возможно, мне не нравится идея загрязнения интерфейса моего модуля.
- На самом деле порождает gen_fsm и отправляет ему серию сообщений, чтобы перевести его в правильное состояние для модульного теста. У этого подхода есть существенная сложность (хотя Мек помогает), и я чувствую, что теряю эти замечательные, чистые функции Module: StateName, которые я могу вызывать без целой связки настроек.
Есть еще предложения?