vida tutorial sinonimo programación lol lenguaje inmortal framework elixir

tutorial - elixir sinonimo



¿Hay alguna forma de probar funciones privadas en módulos en ExUnit of Elixir? (3)

Las funciones definidas por defp no se exportan, por lo que no puedo ejecutarlas en otros lugares que no sean el módulo.


En la definición de su módulo, puede una directiva @compile para exportar sus funciones privadas solo en el entorno de prueba.

defmodule Foo do @compile if Mix.env == :test, do: :export_all # This will be exported for tests defp bar() do ... code ... end end


Es posible cambiar la visibilidad de una función dependiendo del entorno utilizando una macro:

defmacro defp_testable(head, body // nil) do if Mix.env == :test do quote do def unquote(head) do unquote(body[:do]) end end else quote do defp unquote(head) do unquote(body[:do]) end end end end

Luego puedes exponer las funciones a tus pruebas de la siguiente manera:

defp_testable myfunc do ... end

Recomiendo usar esto con moderación por las razones dadas en la respuesta de José. No es un sustituto para probar el comportamiento externo de un módulo. Sin embargo, puede ser valioso en ciertos escenarios.

( Source )


No, no hay forma de probarlos a través de ExUnit.

Personalmente evito probar las funciones privadas porque generalmente terminas probando la implementación en lugar del comportamiento y esas pruebas fallan tan pronto como necesitas cambiar el código. En cambio, pruebo el comportamiento esperado a través de las funciones públicas, dividiéndolos en partes pequeñas y consistentes.