Процессы модульного тестирования, использующие записи для состояния - PullRequest
2 голосов
/ 15 апреля 2011

Я бы хотел провести модульное тестирование gen_fsm, который использует довольно большую запись для своего состояния. Запись определяется в файле erl, который также определяет gen_fsm и, таким образом, (насколько мне известно) не виден другим модулям.

Возможные подходы:

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

Есть еще предложения?

1 Ответ

4 голосов
/ 15 апреля 2011

Вы можете подумать о том, чтобы просто поместить свои тесты непосредственно в модуль gen_fsm, что, конечно, даст им доступ к записи. Если вы не хотите включать тесты в рабочий код и предполагаете, что вы используете eunit, вы можете условно скомпилировать их в или из, как указано в руководстве пользователя eunit :

-ifdef(EUNIT).
   % test code here
   ...
-endif.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...