2010-05-28 44 views
6

Estoy escribiendo pruebas unitarias para un módulo en una pequeña aplicación Javascript. Para mantener la interfaz limpia, algunos detalles de la implementación son cerrados por una función anónima (el patrón habitual de JS para la privacidad). Sin embargo, durante la prueba, necesito acceder/simular/verificar las partes privadas.Prueba de caja blanca en Javascript: ¿cómo lidiar con la privacidad?

La mayoría de las pruebas que he escrito anteriormente han sido en Python, donde no hay variables privadas reales (miembros, identificadores, como quiera que los llame). Uno simplemente sugiere privacidad a través de un guion bajo para los usuarios, y lo ignora libremente mientras prueba el código. En los lenguajes OO con tipado estático, supongo que uno podría hacer accesibles a los miembros privados las pruebas convirtiéndolos para protegerlos y subclasificar el objeto que se probará. En Javascript, este último no se aplica, mientras que el primero parece una mala práctica.

Siempre podría recurrir a las pruebas de caja negra y simplemente verificar los resultados finales. Es el enfoque más simple y limpio, pero lamentablemente no es lo suficientemente detallado para mis necesidades.

Entonces, ¿existe una forma estándar de mantener las variables en privado mientras se conservan algunas puertas traseras para probar en Javascript?

+8

Hmm, no me gusta cuando la gente se burla de mis partes privadas – Martin

Respuesta

1

No, no creo que exista. Básicamente se reduce a si adoptas el enfoque de cierre y abandonas las pruebas de caja blanca o haces pruebas de caja blanca y usas decoración de nombre para miembros "privados". En realidad, no solo en Python, sino en javascript, demasiados proyectos usan el subrayado no tan mágico para decorar partes privadas. Entonces, de alguna manera, esta ya es una solución ampliamente aceptada para el problema.

Si no quiere eso y realmente, realmente necesita pruebas de unidad de caja blanca, entonces siempre puede integrar las pruebas en sus objetos. Si tiene un paso de compilación separado para el código de producción (minimización, requerir/proporcionar resolución, etc.), entonces puede eliminar las funciones de prueba en este proceso.

+0

Bueno, parece que tendré que hacer algo de decoración después de todo. Gracias. Incorporar las pruebas en el código principal y eliminarlas durante la compilación es una solución interesante, pero un poco complicada. –

Cuestiones relacionadas