[{"data":1,"prerenderedAt":40},["ShallowReactive",2],{"article-introduccion-a-las-pruebas-unitarias-y-su-importancia-en-el-desarrollo-de-software":3},{"editorial_managed":4,"editorial_preview":5,"editorial_type":6,"title":7,"slug":8,"href":9,"description":10,"category":11,"category_slug":12,"author":13,"date":14,"updated_at":15,"read_time":16,"cover_image":17,"cover_alt":12,"cover_width":18,"cover_height":19,"cover_small":12,"social_alt":12,"preview_image":17,"social_image":17,"social_width":18,"social_height":19,"social_type":20,"seo_title":7,"seo_description":10,"html":21,"toc":22,"related":38,"tags":39},true,false,"Explicación","Qué comprueban las pruebas unitarias","introduccion-a-las-pruebas-unitarias-y-su-importancia-en-el-desarrollo-de-software","\u002Fes-mx\u002Frecursos\u002Fintroduccion-a-las-pruebas-unitarias-y-su-importancia-en-el-desarrollo-de-software","Conoce qué comprueban las pruebas unitarias, cómo aíslan una parte del software y por qué deben complementarse con otras comprobaciones del sistema.","Artículos","","Acinsoft","2023-01-11 09:47:07","2026-09-17 00:00:00",2,"\u002Fimages\u002Feditorial-20260913\u002F057-social.jpg",1200,630,"image\u002Fjpeg","\u003Cp class=\"lead\">Una prueba unitaria comprueba una parte pequeña del software en condiciones controladas. Sirve para detectar si una regla cambia de forma inesperada; no demuestra por sí sola que todo el sistema funcione.\u003C\u002Fp>\n\u003Ch2 id=\"articulo-seccion-1\">Un ejemplo de regla\u003C\u002Fh2>\u003Cp>Supón una función que aplica una tarifa según cantidad. Antes de probarla, el negocio debe definir qué importe corresponde a cada caso, incluido el límite donde cambia la tarifa. Si la regla está ambigua, automatizarla sólo fijará una interpretación.\u003C\u002Fp>\u003Cdiv class=\"table-wrap\">\u003Ctable tabindex=\"0\" aria-label=\"Tabla de referencia\">\u003Cthead>\u003Ctr>\u003Cth>Caso conceptual\u003C\u002Fth>\u003Cth>Qué comprobar\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Cantidad normal\u003C\u002Ftd>\u003Ctd>Resultado acordado.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Límite de tarifa\u003C\u002Ftd>\u003Ctd>Aplicación correcta de la condición.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Entrada inválida\u003C\u002Ftd>\u003Ctd>Rechazo o tratamiento definido.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"articulo-seccion-2\">Cómo se expresa el resultado\u003C\u002Fh2>\u003Cp>La prueba ejecuta una operación y contrasta su salida con una expectativa. Herramientas como pytest ofrecen aserciones y mensajes de fallo para hacer visible esa diferencia. \u003Ca href=\"https:\u002F\u002Fdocs.pytest.org\u002Fen\u002Fstable\u002Fhow-to\u002Fassert.html\" target=\"_blank\" rel=\"noopener noreferrer\">Cómo escribir aserciones\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"articulo-seccion-3\">Ejercicio pequeño con resultados explícitos\u003C\u002Fh2>\u003Cp>Regla ficticia para practicar: de 1 a 9 unidades se devuelve 100; desde 10, se devuelve 90. Son valores didácticos, no precios ni tarifas de Acinsoft.\u003C\u002Fp>\u003Cpre tabindex=\"0\" aria-label=\"Ejemplo de código\">\u003Ccode>def tarifa(cantidad):\n    if type(cantidad) is not int or cantidad &lt; 1:\n        raise ValueError(\"La cantidad debe ser un entero positivo\")\n    return 90 if cantidad &gt;= 10 else 100\n\nassert tarifa(9) == 100\nassert tarifa(10) == 90\nassert tarifa(11) == 90\ntry:\n    tarifa(0)\nexcept ValueError:\n    pass\nelse:\n    raise AssertionError(\"Debía rechazar cero\")\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Los casos 9, 10 y 11 comprueban la frontera de la regla; el caso cero comprueba un rechazo. Si se cambia por error \u003Ccode>&gt;=\u003C\u002Fcode> por \u003Ccode>&gt;\u003C\u002Fcode>, el caso de 10 debería detectarlo. Para un proyecto real, amplía sólo los casos relevantes y valida la regla con su responsable. Estas pruebas no envían formularios ni guardan importes en una base de datos.\u003C\u002Fp>\n\u003Ch2 id=\"articulo-seccion-4\">Qué queda fuera\u003C\u002Fh2>\u003Cp>Que el cálculo pase no acredita que el formulario envíe la cantidad correcta o que la base de datos guarde el importe. Esas conexiones requieren otras comprobaciones. Por eso conviene distinguir pruebas unitarias, de integración y del recorrido completo del usuario.\u003C\u002Fp>\u003Cp>Tampoco es útil exigir pruebas para cada detalle sin considerar valor y mantenimiento. Prioriza reglas importantes, condiciones límite y errores que sería costoso volver a introducir.\u003C\u002Fp>\u003Cp>Al revisar una entrega, pide un ejemplo de la regla protegida y cómo se detectaría una regresión. Un porcentaje de cobertura aislado puede describir ejecución de código sin mostrar si se comprobaron resultados relevantes.\u003C\u002Fp>\n\n\u003Cp>Para profundizar en las tareas relacionadas: \u003Ca href=\"\u002Fes-mx\u002Frecursos\u002Fcomo-implementar-la-automatizacion-de-pruebas-en-tus-proyectos-de-software\" rel=\"noopener noreferrer\">Qué pruebas de software conviene automatizar primero\u003C\u002Fa>; \u003Ca href=\"\u002Fes-mx\u002Frecursos\u002Fla-importancia-de-las-pruebas-de-integracion-y-como-realizarlas-correctamente\" rel=\"noopener noreferrer\">Cómo comprobar una integración entre sistemas\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cdiv class=\"cta\">\u003Ch2 id=\"articulo-seccion-5\">¿Hay un proceso que necesitas mejorar?\u003C\u002Fh2>\u003Cp>Cuéntanos qué ocurre hoy y qué resultado buscas. Podemos revisar una primera etapa para desarrollar o integrar la solución.\u003C\u002Fp>\u003Ca href=\"\u002Fes-mx\u002Fservicios\u002Fdesarrollo-software\" rel=\"noopener noreferrer\">Explorar desarrollo de software\u003C\u002Fa>\u003C\u002Fdiv>\n",[23,26,29,32,35],{"id":24,"title":25},"articulo-seccion-1","Un ejemplo de regla",{"id":27,"title":28},"articulo-seccion-2","Cómo se expresa el resultado",{"id":30,"title":31},"articulo-seccion-3","Ejercicio pequeño con resultados explícitos",{"id":33,"title":34},"articulo-seccion-4","Qué queda fuera",{"id":36,"title":37},"articulo-seccion-5","¿Hay un proceso que necesitas mejorar?",[],[],1791093721333]