unitarias tutorial test software pruebas libre framework español empaqueta ejemplo cuyo java unit-testing integration-testing

tutorial - pruebas unitarias java netbeans



¿Cómo se hace una prueba unitaria cuando los resultados varían? (5)

Parece que su prueba a un nivel demasiado alto. Considere burlarse de la interfaz del servicio web y escribir otras pruebas unitarias en la capa de datos que accede a la base de datos. Algunos detalles más aquí pueden hacer que esta pregunta sea más fácil de responder, por ejemplo, la situación que intentas probar.

Normalmente esperaría que los resultados de una prueba unitaria no cambien, o al menos que estén dentro del rango que está esperando

Estoy construyendo una aplicación que consulta un servicio web. Los datos en la base de datos varían y cambian con el tiempo. ¿Cómo construyo una prueba unitaria para este tipo de aplicación?

El servicio web devuelve xml o una página html sin resultados de búsqueda. Realmente no puedo cambiar el servicio web. Mi aplicación básicamente consulta el servicio web usando HTTPURLConnection y obtiene la respuesta como una Cadena.

Espero que ayude con más detalles.


Resuma el servicio web utilizando un proxy que puede simular. Haga que su servicio web simulado devuelva varios valores que representan datos normales y casos de esquina. También simule obtener excepciones del servicio web. Asegúrese de que el código funcione en estas condiciones y puede estar razonablemente seguro de que funcionará con los valores que el servicio web proporciona.

Mire jMock for Java burlarse.


Su pregunta es un poco abierta, pero definitivamente hay algunas opciones comprobables solo con la información anterior:

  1. Puede probar si la consulta funciona en absoluto. Afirme que debe recuperar un conjunto de resultados no vacío / no nulo.
  2. Puede probar si los resultados de la consulta son un conjunto de resultados válido . Afirme que los resultados deben pasar su código de validación (por lo tanto, en este punto, usted sabe que los datos no son nulos, no son sensuales y posiblemente útiles).
  3. Si sabe algo sobre la descripción del esquema / datos de datos, puede afirmar que los campos son sensatos entre sí. Por ejemplo, si obtienes un resultado con un helicóptero, no debería asociarse con una altitud de 100 metros negativos ...
  4. Si sabe algo acerca de la distribución probabilística de los datos, debería poder recopilar un conjunto de datos y afirmar que la distribución resultante está dentro de una desviación estándar de lo que esperaría ver.

Estoy seguro de que con más información, obtendrás un montón de sugerencias útiles.


Un problema con el que me he encontrado es con los modelos de datos intrincados (que significa "mierda"), donde nunca se puede estar seguro de que los problemas se deben a errores de código o errores de datos.

Un síntoma de esto es cuando su aplicación funciona bien, pasa todas las pruebas, etc. con datos falsos o un nuevo conjunto de datos, pero se rompe horriblemente cuando ejecuta su aplicación en datos reales.


Estrictamente hablando de pruebas unitarias, solo puedes probar unidades que tienen un comportamiento determinista .

Una prueba que se conecta a un servidor web externo es una prueba de integración .

La solución es simular la HTTPURLConnection, es decir, crear una clase en las pruebas de su unidad que se deriva de la clase HTTPURLConnection y que devuelve un valor codificado o un valor parametrizable. EDITAR : note que esto se puede hacer maunalmente, sin ningún marco burlón.

La clase que consulta el servidor web no debe instanciar la HTTPURLConnection, sino recibirla a través de un parámetro. En las pruebas unitarias, crea HTTPURLConnectionMock y lo pasa a la clase que interroga al servidor web que lo utilizará, ya que está utilizando una HTTPURLConnection real. En el código de producción, crea una HTTPURLConnection real y la pasa a la clase.

También puede hacer que su HTTPURLConnectionMock pueda lanzar una IOException para probar las condiciones de error . Simplemente tenga un método para decirle que no devuelva el resultado, sino una excepción en la próxima solicitud.