unitarias spec rails pruebas describe ruby rspec private-methods

spec - pruebas unitarias ruby



¿Debo probar métodos privados utilizando RSpec? (2)

No debe probar métodos privados, ya que pertenecen al mecanismo interno de la clase. El propósito de las pruebas unitarias es verificar que su clase se comporte como se espera cuando interactúa a través de su interfaz, es decir, sus métodos públicos.

Si en algún momento no te sientes cómodo con los métodos privados largos, es probable que tengas la oportunidad de sacar esa lógica fuera de la clase y construir otro módulo o clase. Luego, puede probarlo por unidad, de nuevo solo su interfaz, es decir, sus métodos públicos.

En algunos casos raros, es necesario probar los métodos privados porque toda la lógica interna es muy compleja y le gustaría dividir el problema. Pero en el 99.9%, probar métodos privados es una mala idea.

¿Es una buena práctica escribir pruebas para métodos privados?

Considere el siguiente ejemplo sencillo:

class Group has_many :members private def release_members members.each { |member| member.update_attributes group_id: nil } end end

¿Sería una buena práctica escribir una prueba para el método release_members en RSpec? Creo que tendrías que escribir la prueba llamando al método con enviar, es decir. group.send(:release_members) que a veces es mal visto.


Puede encontrar una discusión en profundidad de ese tema en estas diapositivas de una charla de Sandi Metz.

https://speakerdeck.com/skmetz/magic-tricks-of-testing-railsconf

Ella dice que puedes probar tus métodos privados si lo deseas, pero que la única prueba que debes preocuparte son las que están probando la interfaz pública. De lo contrario, es posible que se esté acoplando demasiado fuerte a la implementación

Creo que el punto por punto, dividir el servicio y el objeto de valor y ponerlos a prueba también es bueno si te estás poniendo nervioso por los complejos métodos privados que no se prueban.