У меня есть GenServer, который отвечает за контакт с внешним ресурсом. Результат вызова внешнего ресурса не важен, когда-либо сбои время от времени приемлемы, поэтому использование handle_cast
представляется подходящим для других частей кода. У меня есть интерфейсный модуль для этого внешнего ресурса, и я использую один GenServer для доступа к ресурсу. Все идет нормально.Как правильно проверить handle_cast в GenServer?
Но когда я попытался написать тест для этого gen_server, я не мог понять, как тестировать handle_cast
. У меня есть функции интерфейса для GenServer, и я пытался их протестировать, но они всегда возвращают :ok
, за исключением случаев, когда GenServer не работает. Я не мог проверить это.
Я немного изменил код. Я отвлек код в handle_cast
на другую функцию и создал аналогичный обратный вызов handle_call
. Тогда я мог легко проверить handle_call
, но это было вроде взлома.
Я хотел бы знать, как люди обычно тестируют асинхронный код, вот так. Был ли мой подход правильным или приемлемым? Если нет, что тогда делать?
Что бы вы хотели испытать в 'handle_cast' здесь? Что он смог получить первоначальный контакт с внешним ресурсом? или что это также удалось? Вы действительно хотите связаться с этим внешним ресурсом во время каждого тестового прогона? (Некоторый приблизительный контур кода также будет полезен.) – Dogbert
Нет, я вставляю модуль интерфейса внешнего ресурса в GenServer, поэтому я не хочу фактически связываться с ресурсом (это будет стоить мне денег). Поскольку 'handle_cast' использует некоторые функции интерфейсного модуля, я хочу проверить, что он преуспевает, когда функции возвращают okayish значения. Добавление кода - хорошая идея, я сделаю это сегодня, через несколько часов. – vfsoraki