я уже хз, можно было бы и адаптер бахнуть, но тут и так примеров больше чем текста, а пример с apply привлек больше внимания, чем предложение выносить бизнес логику из генсервера
Разница в том, что gen_server уже делает apply, а в реализации с форвардом делается ещё один apply. Для тестирования можно делать handle_call напрямую, а чтобы выносить логику в другой модуль и дергать через apply - для этого должна быть более везкая причина (возможность в разные имплементации GenServer-ов воткнуть имплементацию логики).
Я бы пользовался стандартным механизмом, по крайней мере нету иллюзий что коллбэки оторваны от генсервера, либо генерировал похожий apply через макрос или даже руками.
Кроме того, я бы не советовал так тестировать генсервер, потому что один сервер это один юнит, и должны быть веские причины чтобы эти функции так отдельно тестировать…
Разница в том, что gen_server уже делает apply, а в реализации с форвардом делается ещё один apply. Для тестирования можно делать handle_call напрямую, а чтобы выносить логику в другой модуль и дергать через apply - для этого должна быть более везкая причина (возможность в разные имплементации GenServer-ов воткнуть имплементацию логики).