Как я делаю внедрение зависимости и насмешки в erlang?

from time import sleep
sleep(0.05)

Ссылка

21
задан marco.m 9 January 2016 в 16:06
поделиться

3 ответа

Здесь нужно учесть две вещи ...

Вам необходимо разделить весь ваш код на 2 разных типа модулей :

  • чистых функциональных модулей (также известные как модули без побочных эффектов)
  • модули с побочными эффектами

(Вы должны прочитать об этом и убедиться, что понимаете разницу - наиболее типичный побочный эффект - и тот, который есть в вашем примере code - это запись в базу данных).

Модули, которые являются чисто функциональными, становятся тривиальными для тестирования. Каждая экспортированная функция (по определению) всегда возвращает одни и те же значения, если в нее вставлены одни и те же значения. Вы можете использовать структуру EUnit / Assert , которую написали Ричард Карлссон и Микаэль Ремонд. Биш-баш-чушь, работа хорошая, не ...

Ключевым моментом является то, что около 90% вашего кода должно быть в чистых функциональных модулях - вы резко уменьшите свою проблему. (Вы можете подумать, что это не «решение» вашей проблемы, а просто ее «уменьшение» - и вы будете в основном правы ...)

Как только вы добьетесь этого разделения, лучший способ модульного тестирования модулей с побочными эффектами - использовать стандартную тестовую среду .

Мы делаем это не для использования имитационных объектов, а для загрузки базы данных в функциях init_per_suite или init_per_test, а затем запускаем сами модули ...

Наилучший способ - как можно скорее перейти к системным тестам для этого, хотя, поскольку модульные тесты сложно поддерживать - так что достаточно модульных тестов, чтобы вы прошли проверку системы туда и обратно, и не более ( даже лучше как можно скорее удалить модульные тесты db).

22
ответ дан 29 November 2019 в 21:12
поделиться

Гордон прав в том, что основная цель - протестировать небольшие функции, свободные от побочных эффектов.

Но ... что ж, можно также протестировать интеграцию, поэтому давайте покажем, как это можно сделать.

Инъекция

Избегайте списков для переноса параметризованных зависимостей. Используйте запись, словарь процесса, параметризованные модули. Код будет менее уродливым.

Швы

Не сосредотачивайтесь на переменных модулях как на стыках зависимостей, пусть процессы будут стыками. Жесткое кодирование имени зарегистрированного процесса - это упущенная возможность внедрения зависимости.

4
ответ дан 29 November 2019 в 21:12
поделиться

Я согласен с тем, что говорит Гатри. Вы будете удивлены, насколько большую часть вашей логики можно превратить в чистые функции.

Одна из вещей, которую я в последнее время привязываю к новым параметризованным модулям, - это использование параметризованных модулей для внедрения зависимостей. Это позволяет избежать проблемы со списками параметров и словарями процессов. Если вы можете использовать последние версии erlang, это тоже может вам подойти.

4
ответ дан 29 November 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: