¿Es una buena idea cambiar los métodos privados a protegidos para las pruebas JUNIT?Cambiar los métodos privados a protegidos para probar
Respuesta
A veces es útil, sí.
Si la clase es extensible, asegúrese de que el método sea definitivo.
Además, documente el hecho de que no se supone que el método sea llamado por subclases o clases externas del mismo paquete.
Utilizo la anotación Guava @VisibleForTesting para dejar en claro que el método debe ser privado.
Gracias por abrir mis ojos a @VisibleForTesting. No sabía que esto existía. Sigue sintiendo que esto es un poco imperfecto ya que afecta la sintaxis de la implementación solo con el propósito de probar, pero es mejor que exponer a los miembros y métodos que deberían ser privados. Y limitar las pruebas a los métodos de interfaz parece una restricción demasiado estricta y a veces poco práctica. – Lolo
Puede hacer que el paquete de métodos sea local.
Puede llamar al método privado mediante reflexión, o puede decidir que los métodos private
no se deben probar directamente, solo indirectamente.
No, en general, no. La idea de la prueba unitaria es probar ... unidades. O en otras palabras, implementaciones de métodos de interfaz. Si desea probar un método que no puede "ver", podría ser un olor a código. Tal vez no haya separado su lógica comercial lo suficiente del código UI o algo así.
Así que la mejor idea sería reconsiderar su arquitectura. Pero si la alternativa sería no probar tu código, es una buena idea proteger esos métodos.
Aunque debería preferir refactorizar como se sugirió @ user714965, MockPrivate de PowerMock puede hacer la burla sin abrir la visibilidad de sus métodos privados.
Escribir sus pruebas primero generalmente conduce a un diseño donde no necesita burlarse de métodos privados.
- 1. ¿Cómo debo probar los métodos privados en Java?
- 2. Mejores prácticas para probar métodos protegidos con PHPUnit
- 3. ¿Cómo puedo probar métodos privados con DUnit?
- 4. ¿Es posible tener una interfaz que tenga métodos privados/protegidos?
- 5. Miembros privados y protegidos: C++
- 6. ¿Pueden los métodos estáticos de PHP legalmente tener la visibilidad de protegidos o privados?
- 7. Anulación de métodos protegidos
- 8. Cómo probar campos privados que se modifican mediante métodos públicos
- 9. ¿Probar métodos privados y clases internas con NUnit?
- 10. Pruebas unitarias aplicadas a métodos privados
- 11. métodos "protegidos" en C#?
- 12. respon_to? y métodos protegidos
- 13. Métodos protegidos en Objective-C
- 14. ¿Finalizar métodos privados?
- 15. Bloques vs métodos privados?
- 16. Métodos privados y campos
- 17. F # Métodos estáticos privados
- 18. ¿Cómo se prueban los métodos privados con NUnit?
- 19. ¿Por qué PHP permite que los métodos protegidos y privados se hagan públicos mediante una anulación en subclases?
- 20. Uso de métodos estáticos privados
- 21. Cómo utilizar moq para probar código que llama ayudantes protegidos
- 22. Pruebas unitarias de métodos privados en Xcode
- 23. JavaDoc: campos y métodos privados
- 24. Método Interceptor en métodos privados
- 25. Sustitución de métodos protegidos en Java
- 26. Prueba y burla de métodos privados/protegidos. Muchas publicaciones pero todavía no pueden hacer que un ejemplo funcione
- 27. ¿Por qué los métodos antlr3 C# parser son privados?
- 28. ¿Variables/métodos privados en la clase anónima?
- 29. Acceso a los miembros privados de PowerShell
- 30. ¿Por qué las clases internas hacen accesibles los métodos privados?
¿Por qué debería? ¿Cambias algo antes de la prueba, no puedo ver NINGUNA razón para ello? – Nanne
Casi ciertamente no es una buena idea; Si está probando directamente los métodos internos de una clase, debería considerar refaccionarlos en una clase separada. –
Lo he hecho en casos en que un método privado devuelve algún recurso que no está disponible en el entorno de prueba de la unidad, y quiero probar algún otro método (no privado) que lo llame. Al protegerlo, puedo anularlo, de modo que devuelva un stub/mock en lugar del recurso no disponible. Esto ha significado que una prueba unitaria se vuelve factible y no he podido encontrar otra forma de evitar esto, pero es menos que ideal. –