Introducción a los Test Unitarios (Unit Testing)

En este artículo, vamos a centrarnos en hablar más detalladamente sobre las pruebas Unitarias. Para poder seguir completamente este artículo, es muy recomendable el haber leído nuestro artículo de Introducción a las Pruebas de Software (Testing software). En el artículo anterior, expusimos en términos generales, las principales pruebas que podemos realizar para un desarrollo del software.

Ampliando lo que hablemos en dicho artículo, descartar la realización de pruebas unitarias debido a una carga de trabajo elevada, a falta de tiempo, a que el cliente no las a solicitó, a causa de falta de conocimiento, o el motivo que sea, es un grave error.

Las test no son opcionales. Un software sin testear es equivalente a dormir encima de una bomba. Acabará explotando. ¡BOOOOMMMM!

Y estos errores, a largo plazo, repercutirán en la salud económica de proyecto.

Aunque ya hablemos respeto a que las pruebas unitarias son la base de la pirámide de las pruebas. Debido a que son baratas y evitan que los errores suban hacía capas superiores. Y con ello, evitamos que el precio de solventar el bug crezca exponencialmente más y más conforme más se eleve el bug en dicha jerarquía.

Acabamos de ver la importancia de hemos visto la importancia de realizar pruebas unitarias.

Las pruebas unitarias, las cajas negras

Los desarrolladores, solemos realizar 2 o 3 casos cuando escribimos un código y si no falla solemos decir que funciona bien. ¿Pero realmente podemos afirmar que ese código está realmente testeado? ¿Creéis que puede subir a producción? La respuesta a ambas preguntas es NO.

Las pruebas unitarias o Unit Testing en inglés, son pruebas donde se testean componentes individuales de un programa (un ejemplo podría ser el testing de una función o de una clase).

Consisten en introducir un conjunto de entradas dentro de un código y determinar si el conjunto de salida es el esperado. Es decir, comprobar si los valores devueltos son correctos o no. Y manejar los fallos, si se proporciona un valor no esperado.

El propósito de este tipo de pruebas, es el garantizar que cada componente funcione aisladamente. También, que todo funciona como se espera que debe funcionar, y que todo responda como debe responder. Y que falla cuando debe y como debe fallar. Y acepta lo que tiene que aceptar.

Las pruebas unitarias generalmente suelen ser la unidad mínima de trabajo del testing. Usualmente, las pruebas unitarias, se realizan sobre un método, una función o una clase. Aunque no siempre es así. En algunas ocasiones, la unidad mínima de trabajo es un conjunto de métodos o de operaciones y no un método o función única. Entendemos como unidad de trabajo, a toda aquella operación o conjunto de operaciones que causa un cambio en el sistema o una respuesta que genera dicho sistema.

Estructura de un Test Unitario

La estructura de un test unitario, está formada por 3 elementos principales:

  1. Conjunto de entradas.
  2. Unidad de trabajo a probar.
  3. Conjunto de salidas.

Secciones de un Test Unitario

Usualmente un test se divide en 3 secciones:

  1. Etapa de preparación (Arrange): donde se establecen los valores de entrada, así como los valores esperados. Y cualquier otra preparación que se necesite para realizar la prueba unitaria.
  2. Etapa de acción o de ejecución (Act): donde se ejecuta la prueba sobre la unidad de trabajo a probar.
  3. Etapa de comprobación (Assert): donde se revisa que las condiciones esperadas se hayan cumplido. Así como que el método haya producido los cambios esperados o haya devuelto el valor esperado.

Características de los test unitarios

Por lo general, el propio programador que escribe el código o la unidad de trabajo, es el que tiene que escribir los test unitarios para probar su código.

En este caso, hay que tener hay que ser precavido, debido a que al ser nosotros los que escribimos el código, puede que nos confiemos en que la unidad de trabajo funciona correctamente. O que escribamos test unitarios menos exigentes, y por tanto, que no contemplen casos que puedan fallar fácilmente, es decir, que no sean muy efectivos.

O que únicamente testees los casos del test que funcionan correctamente o que no escribas los test unitarios en los que tu programa falle (por desconocimiento, apropósito, etc.).. Por todo esto, tienes que ser muy cuidadoso en los casos que estableces para probar tu código.

Ya que a pesar de que puede que existan una infinidad de posibilidad de entradas. Existen casos que son más probables que fallen que otros. Por ejemplo en el caso de que tengamos que introducir un número del 1 al 10 como nota de un examen. Los casos que fallarán con más probabilidad y que, por lo tanto sería recomendable testear mediante a una prueba unitaria los casos como: un campo vacío (null), -100,-10, -1, 0- 1, 5, 10, 11, +100 y luego lo mismo con decimales (ejem: 10.0 y 10,0) y también habría que testear la introducción de caracteres, intentar desbordar el rango máximo del tipo de dato, etc. Con la finalidad de llevar dicho código al límite.

Las pruebas unitarias son independientes del entorno, con esto nos referimos, a que se pueden poder ejecutar en cualquier entorno, nuestro equipo, en el del cliente, en el de producción o en el que sea (siempre que cumplan los requisitos de hardware, etc.).

Cada prueba unitaria es independiente de otras pruebas unitarias. Por tanto, cada unidad de trabajo, depende únicamente de la clase que testea. Los datos se introducen mediante a Mocking, un mecanismo que burla o engaña a la prueba unitaria. Con ello le permitimos introducir datos “hardcodeados” (picados a mano). Por tanto, no dependen de fuentes externas de datos, como ficheros, o información de BBDD.

ada unidad de trabajo, depende únicamente de la clases que testea. Los datos se introducen mediante a Mocking, un mecanismo que burla o engaña a la prueba unitaria. Con ello le permitimos introducir datos “hardcodeados” (picados a mano). Por tanto, no dependen de fuentes externas de datos, como ficheros, o información de BBDD.

Las pruebas unitarias sobre una unidad de trabajo suelen ser rápidas, sobretodo, en sus fases de preparación (arrange) y comprobación (assert). La fase intermedia entre ambas, la ejecución (act), será la que aunque no suele ser lenta tarde lo que tenga que tardar en función de varios factores como por ejemplo, la cantidad de comprobaciones a realizar.

Los unit testing, deben de ser mantenibles, tanto por el propio programador que los desarrolle, como por el resto del equipo de programadores.

Tipos de pruebas unitarias

Las pruebas unitarias, se pueden subdividir en 2 grupos según quién realiza la interacción en:

  • Pruebas manuales: las desarrolla el programador, por tanto, podemos afirmar que existe interacción humana.
  • Pruebas automatizadas: las desarrolla un software destinado a ello, por tanto, no existe interacción humana.

No hay que elegir entre unas u otras, lo ideal, es la combinación de ambas. Y con ello, aprovechar los beneficios de ambas.

28 comentarios

  1. Thanks for another informative site. The place else may just I get that kind of info written in such an ideal way?
    I’ve a challenge that I am simply now working on, and I’ve been on the glance out for such information.

  2. May I simply say what a comfort to discover someone who actually understands
    what they’re discussing over the internet. You certainly understand how to bring an issue
    to light and make it important. More people should read this and understand this side of your story.
    I was surprised that you’re not more popular since you most certainly possess the gift.

  3. Just desire to say your article is as astounding.

    The clearness to your put up is just nice and that i could suppose you are an expert
    in this subject. Fine along with your permission allow me to take hold of your RSS feed to keep updated with coming near near post.
    Thanks 1,000,000 and please carry on the enjoyable work.

  4. It’s very easy to find out any matter on web as compared to books, as I
    found this paragraph at this website.

  5. My brother suggested I might like this web site. He was
    entirely right. This post truly made my day.
    You can not imagine simply how much time I had spent for this info!
    Thanks!

  6. I have been absent for a while, but now I remember why
    I used to love this site. Thanks, I’ll try and check back more frequently.
    How frequently you update your site?

    Look into my web page :: Viking XL Keto Reviews

  7. It’s genuinely very complicated in this full of activity life to listen news on TV, so I only use world wide web for that
    reason, and take the hottest news.

    Also visit my web page … Pure Keto Burn Pills

  8. Oh my goodness! Incredible article dude! Many thanks, However I am having troubles with your RSS.
    I don?t understand the reason why I can’t subscribe to it.
    Is there anybody getting identical RSS issues? Anyone who knows the solution will
    you kindly respond? Thanx!!

    Also visit my webpage … http://www.aniene.net

  9. I was able to find good advice from your content.

  10. I love what you guys are up too. This sort of clever work and exposure!
    Keep up the terrific works guys I’ve included you guys to my personal blogroll.

    Also visit my page; Green Leaf Hills Review

  11. Generally I do not learn article on blogs, however I would like to say that
    this write-up very pressured me to check out and do it! Your writing taste
    has been amazed me. Thanks, quite great article.

    my blog: Libido Boost

  12. Great delivery. Outstanding arguments. Keep up the amazing spirit.

    My website :: bbs.yunweishidai.com

  13. I’ll immediately seize your rss as I can not find your
    e-mail subscription link or newsletter service. Do you have
    any? Kindly allow me know so that I may subscribe. Thanks.

  14. Keep functioning ,terrific job!

    Feel free to visit my web blog :: Wawza Apple Cider Gummies Reviews (http://www.diclelife.com/)

  15. Thank you a bunch for sharing this with all folks you really know what you’re speaking approximately!
    Bookmarked. Kindly also visit my website =). We may have a hyperlink alternate contract between us!

    Here is my webpage – Biodermeux Review

  16. I seldom comment, however after looking at a few of the responses on this
    page Introducción a los Test Unitarios (Unit Testing) – Java desde 0.
    I do have a few questions for you if it’s allright. Could it
    be only me or does it look like a few of the comments come across
    like they are left by brain dead visitors? 😛 And, if you are
    posting on additional social sites, I’d like to follow you.
    Could you make a list of all of all your social community sites like your
    twitter feed, Facebook page or linkedin profile?

    Have a look at my web page; Wawza Apple Cider Vinegar

  17. Amazing! Its actually awesome piece of writing, I have got much clear idea regarding from this paragraph.

    Here is my web site; Libido Boost Male Enhancement Ingredients

  18. I am delighted that I observed this weblog, exactly
    the right info that I was looking for!

    My web blog Green Leaf Hills Reviews

  19. I am sure this paragraph has touched all the internet visitors, its really really pleasant piece of writing on building up new weblog.

  20. I have to thank you for the efforts you’ve put in writing this site.
    I really hope to see the same high-grade blog posts
    from you in the future as well. In fact, your creative writing abilities has encouraged me to get my own blog now 😉

    Take a look at my web-site … Yoni Pur Reviews

  21. Asking questions are truly fastidious thing if you are not understanding something totally, except
    this paragraph offers good understanding yet.

  22. There’s certainly a lot to know about this topic. I really like
    all the points you’ve made.

  23. What’s up, I desire to subscribe for this web site to get newest updates,
    thus where can i do it please help out.

    my web site – Natural Burn Keto Reviews

  24. As the admin of this web page is working, no uncertainty very rapidly it will be famous, due to its
    feature contents.

  25. My brother recommended I might like this website. He was entirely right.
    This post actually made my day. You can not imagine simply
    how much time I had spent for this info! Thanks!

  26. Hi there, for all time i used to check webpage posts here in the early hours in the morning, since i love to find out
    more and more.

  27. When some one searches for his required thing, thus he/she wishes to be available
    that in detail, therefore that thing is maintained
    over here. quest bars http://j.mp/3C2tkMR quest bars

  28. Have you ever thought about including a little bit more than just your articles?
    I mean, what you say is fundamental and all. Nevertheless think about if you added some great images or videos to give your posts more, “pop”!

    Your content is excellent but with images and videos, this
    blog could certainly be one of the most beneficial
    in its niche. Superb blog! scoliosis surgery https://0401mm.tumblr.com/ scoliosis surgery

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar