He estado leyendo mucho sobre el desarrollo basado en pruebas y he decidido que quiero probarlo en un proyecto pequeño. Como referencia, actualmente estoy leyendo 'Crecimiento de software orientado a objetos, guiado por pruebas'.¿Cómo puedo crear pruebas de extremo a extremo para aplicaciones Mac (Cocoa)?
Entiendo cómo probar mi unidad unitariamente y cómo probar algunas partes de la UI, pero estoy luchando para establecer pruebas completas. Por ejemplo, probar que una determinada ruta a través de toda mi aplicación produce el resultado correcto (esta es mi comprensión básica de una prueba de extremo a extremo).
No es necesario simular eventos de clic, pero es necesario tener algún tipo de conexión a la interfaz de usuario.
¿Estoy en lo cierto al pensar que necesito una combinación de pruebas "lógicas" (prueba sin iniciar la aplicación), pruebas de "aplicación" (prueba con el lanzamiento de la aplicación) y la funcionalidad asíncrona de algo así como GHUnit para lograr esto?
EDIT:
Después de leer algunas de las respuestas a continuación, suena como que estoy en busca de pruebas de funcionamiento de extremo a extremo, pero creo que debería dar un ejemplo de una prueba como me lo imagino.
- Inicie la aplicación.
- Llamar a la función de inicio de sesión con una prueba de credenciales de los usuarios. (Nota: no necesariamente necesita automatización de UI).
- Verifique que una etiqueta en la ventana diga "Iniciar sesión ...".
- Después de verificar con éxito al usuario, verifique que la etiqueta ahora diga "¡Bienvenido, Adam!".
KIF parece que podría funcionar, ya que tiene pasos para verificar los cambios en los elementos de la interfaz de usuario y parece que también hay una rama de Mac OSX. Estoy seguro de que también podría escribir una pequeña clase que constantemente sondee la IU para ver los cambios que espero y se agote después de cierto tiempo, pero me pregunto si esta es la forma correcta de hacerlo.
Sin embargo, tal vez estoy tratando de tomar lo que estoy leyendo en 'Growing Object-Oriented Software, Guided by Tests' y tratar de aplicarlo literalmente a Cocoa.
Otra actualización:
Así que he estado leyendo el consejo hasta el momento, comprueba los diversos lugares vinculados y comenzó a poner en práctica algo mientras sigue haciendo referencia al libro. Creo que lo que realmente estoy tratando de obtener es el Test-Driven -parte de desarrollo. Lo que más resaltó en dicho libro fue que describieron primero lo que querían que ocurriera desde la perspectiva de los usuarios con las pruebas de aceptación.
Me doy cuenta de que las pruebas sólidas de la unidad serán necesarias tan pronto como empiece a escribir métodos, pero antes quise escribir algunas pruebas de aceptación de alto nivel, usando parte de la IU. Empecé a escribir mi propia clase de "controlador" de aplicaciones, utilizando algunos métodos similares a las ideas de GHAsyncTestCase para ayudarme a lograr esto. ¿Esto suena correcto/útil/necesario?
Realmente aprecio todos los comentarios hasta ahora y definitivamente me han ayudado a resolver por mi cuenta lo que estoy tratando de hacer y las diversas áreas de prueba que existen. Terminaré pronto esta pregunta, ya que cada vez es más grande, ¡así que cualquier consejo final es bienvenido!
Gran primera pregunta! – logancautrell