2009-12-08 14 views
8

Soy nuevo en pruebas unitarias así que me gustaría obtener la opinión de algunos que están un poco más informados.pruebas unitarias para raspar pantallas?

Necesito escribir un código de raspado de pantalla en breve. El sistema de destino es una interfaz de usuario en la web donde se analizarán copiosamente HTML y se utilizará una bondad volátil similar. Nunca recibiré notificaciones de ningún cambio por parte del sistema de destino (por ejemplo, ponen un rediseño en su sitio o cambian la funcionalidad). Así que anticipo mi código rompiendo regularmente.

Así que creo que mi verdadera pregunta es, ¿cuánto, si alguna, de mi unidad de prueba debería preocuparse o tratar con la interfaz (el sitio web que estoy raspando) cambiando?

Creo que las pruebas unitarias o no, voy a tener que realizar grandes pruebas en tiempo de ejecución ya que necesito asegurarme de que los datos que estoy consumiendo son prístinos. Incluso si realicé pruebas unitarias antes de cada ejecución, la interfaz de usuario web aún podría cambiar entre las pruebas y el tiempo de ejecución.

Entonces, ¿me concentro en las pruebas en código y en el manejo de excepciones? ¿Significa eso trazar una línea en la arena y excluir este tipo de prueba de las pruebas unitarias?

Gracias

+1

No creo que se refiera a "pruebas unitarias". Las pruebas unitarias son algo que usted realiza para probar el código que ha escrito esencialmente a nivel de método. La forma en que estoy leyendo su pregunta, suena más como si estuviera hablando de pruebas automatizadas para ver si su aporte es lo suficientemente bueno como para ejecutar el resto del trabajo. ¿Es eso cierto? –

+0

Bueno, no estoy muy seguro, pero por ejemplo, había imaginado quizás un método getGoogleSearchResult() y para ese método podría hacer una prueba y aserciones. Y no, no estoy raspando Google SERPs.:) – Chris

Respuesta

6

Las pruebas unitarias siempre deben diseñarse para tener resultados conocidos repetibles.

Por lo tanto, a la unidad de prueba de una pantalla-raspador, se debe escribir la prueba en contra de un conjunto conocido de HTML (puede usar un objeto de burla para representar este)

El tipo de cosas que está hablando doesn Realmente me suena como un escenario para las pruebas unitarias: si quiere asegurarse de que su código se ejecute de la manera más robusta posible, entonces es más, como usted dice, sobre las pruebas en código y el manejo de excepciones.

También incluiría algún código de alerta, por lo que el sistema lo alertó de las ocasiones en que el HTML no se analiza como se esperaba.

+0

Sí. Hice algo muy similar. Obtenga HTML que coincida con varios casos (sección presente, sección faltante, tabla vacía, etc.) y alimente esas cadenas en su clase de análisis (que debe estar separada de su clase de descarga web). – TrueWill

+0

Gracias, creo que esto realmente habla de mi conflicto exacto con esto. ¡Y aceptó el código de alerta! – Chris

1

creo que las pruebas unitarias cosa podrían ser útiles para aquí es si usted tiene un servidor de compilación que le dará un aviso temprano el código ya no funciona. No puede escribir una prueba unitaria para demostrar que la creación de pantallas seguirá funcionando si el sitio cambia su HTML (porque no puede decir qué cambiarán).

Es posible que pueda escribir una prueba unitaria para comprobar que algo útil ha resultado de sus esfuerzos.

+0

Comprobar que algo útil (y que cae dentro de las restricciones conocidas) es básicamente lo que tenía en mente si estuviera escribiendo pruebas unitarias para los diversos métodos de raspado. – Chris

2

Debe intentar separar sus pruebas tanto como sea posible. Pruebe la gestión de datos con pruebas de bajo nivel que ejecutan el código real (es decir, , no a través de un navegador simulado).

En el navegador simulado, solo asegúrese de que ocurra lo correcto al hacer clic en los botones, al enviar formularios y al seguir los enlaces.

Nunca intente comprobar si el diseño es correcto.

+0

Ningún navegador en la mezcla. Solo ejecución de línea de comando y curl. – Chris