¿Se considera 'mala práctica' verificar el contenido / codificación del archivo en las pruebas unitarias?

84

Un poco de contexto: hoy tuve que actualizar un código SQL que otro colega mío proporcionó, y dado que es un script bastante grande, se almacena como un archivo separado (que luego se lee y se ejecuta en tiempo de ejecución). Mientras hacía esto, accidentalmente reintroduje dos errores que tuvimos hace unos meses, a saber:

  • Por alguna razón, el archivo ASCII fue codificado en UTF-16 (el colega me envió el archivo por correo electrónico, lo que podría haberlo causado).
  • Al script le faltaban las SETdeclaraciones iniciales (requeridas debido a algunos elementos del controlador en producción, pero no en una instalación limpia localmente).

Después de depurar esto durante aproximadamente una hora (nuevamente) decidí escribir algunas pruebas unitarias para asegurar que esto nunca vuelva a suceder (e incluir una forma rápida de solucionarlo en el mensaje de afirmación para proporcionar una solución fácil para futuros desarrolladores).

Sin embargo, cuando introduje este código, otro colega (que también es el líder de nuestro equipo) se me acercó y me dijo que no debería volver a hacer estas cosas porque:

"Estas cosas no pertenecen a las pruebas unitarias"

"Las pruebas unitarias solo deben usarse para verificar el flujo de su código"

Ahora estoy bastante en conflicto ya que sigo pensando que lo que estoy haciendo no está mal, ya que este error no se reintroducirá en el futuro, sin embargo, este colega trabaja como senior y al final del día decide qué pasamos nuestro tiempo en ¿Qué tengo que hacer? ¿Me equivoco por hacerlo de esta manera? ¿Se considera una mala práctica?

Paradoja
fuente
35
" Las pruebas unitarias solo deben usarse para verificar el flujo de su código " Yo diría que es una mierda. Tradicionalmente, deben incluir todas las pruebas necesarias para garantizar que la "unidad" considerada aisladamente sea correcta. Si escribe solo aquellas pruebas unitarias que son útiles para "verificar el flujo", sea lo que sea que eso signifique, espero que también tenga suites de pruebas extensas separadas (¿redactadas por el departamento de control de calidad?).
gbr
8
El problema de su colega, de todos modos, es probablemente el lugar donde coloca esas pruebas. Me enfocaría en eso, dejando de lado las discusiones de denominaciones / guerras santas. Es posible que esas pruebas sean demasiado lentas para el conjunto al que las agregó, pero también es completamente posible que su colega simplemente esté obsesionado con su idea de las pruebas unitarias y esté creando un problema debido a un problema inexistente; así que es mejor aclarar primero cuál es el verdadero problema.
gbr
2
Por cierto, esas pruebas se parecen a algo que querría ejecutar cada vez que modifica ese archivo SQL. Aquí el problema principal podría ser las herramientas de prueba, que podrían no admitir un modo de operación "ejecutar solo si se modifica"; si da lugar a problemas reales y concretos, podría valer la pena incluir la funcionalidad "solo si se modifica" manualmente con algún tipo de error solo para esas pruebas específicas.
gbr
55
En lugar de probar que el archivo tiene el contenido y la codificación correctos, ¿por qué no probar que funciona ?
user253751

Respuestas:

156

Lo más probable es que las pruebas que escribió estén más cerca de las pruebas de integración o regresión que las pruebas unitarias. Si bien la línea puede ser muy difusa y a veces se convierte en pedantería sobre lo que es o no una prueba unitaria, volvería a su colega y le preguntaría dónde deberían estar las pruebas que escribió, ya que agregan valor y garantizan la corrección del código.

No me enfocaría demasiado en lo que es o no es una prueba unitaria y me doy cuenta de que incluso si se trata de una prueba de integración, aún podría haber valor en la prueba.

CauchoPollo
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Thomas Owens
36

Técnicamente, no es una prueba unitaria, y más bien un paso de validación. El enfoque adecuado realmente depende de cuál sea su flujo de trabajo. El líder de su equipo tiene razón sobre cuál es el propósito de las pruebas unitarias. Mi sensación es que este es un caso de usar la herramienta incorrecta para un trabajo que todavía debe hacerse. Entonces comience con esto:

¿Cuál es el problema que estoy tratando de resolver?

Según la descripción, debe validar que cualquier script de base de datos cumpla con algunos estándares.

¿Qué herramientas / procesos están disponibles para resolver el problema?

La calidad del código fuente generalmente se verifica mediante herramientas de análisis estático . Si no tiene una herramienta de análisis estático para validar su SQL, puede crear una herramienta rápida y sucia que realice la verificación de cualquier archivo SQL que se le pase. No está de más comprobar si hay herramientas de análisis estático que puedan manejar los problemas de los que está hablando.

Si integra esa infraestructura de compilación, como incorporarla a Jenkins o algo así, se puede aplicar a todos los archivos SQL de su proyecto.

Las pruebas unitarias solo resuelven el problema de su archivo actual.

¿Cómo comunico la necesidad de la herramienta?

Esto es bastante fácil, hablas con el líder de tu equipo. Él puede trabajar con el propietario del producto y con usted para determinar el riesgo / recompensa de invertir en las herramientas. Si es probable que sea un problema único, entonces las herramientas probablemente serían excesivas. Si las herramientas para atrapar los problemas más grandes son fáciles, puede valer la pena solo por el control de la cordura.

El líder de su equipo puede tener algunas ideas que usted (o yo) no hemos considerado, que pueden abordar el problema más correctamente.

Berin Loritsch
fuente
21
Cuando se discute el costo versus el riesgo, sería importante tener en cuenta que ya ha causado tiempo perdido debido a la reintroducción de errores previamente resueltos. Este solo es un argumento fuerte para automatizar la verificación. +1
jpmc26
1
@ jpmc26, estoy completamente de acuerdo. La discusión debe comenzar con el hecho de que perdió por muchas horas descubriendo lo que estaba mal, y sus pruebas de unidad fueron su primer intento de evitar que el resto del equipo pierda la misma cantidad de tiempo. Sin embargo, trabajar con el líder del equipo que tiene que responder a la gerencia y las partes interesadas generalmente es muy apreciado. Como líder de equipo, quiero poder defender las herramientas / prácticas / código que administramos. Si vi pruebas unitarias que no se pueden rastrear hasta los requisitos reales, también me preocuparía.
Berin Loritsch
1
@BerinLoritsch Técnicamente, no es una prueba unitaria . Realmente me gustaría saber en qué "técnica" basa esta afirmación. Por lo que puedo decir, no existe una definición autorizada única de pruebas unitarias y cada uno ha llegado a tener su propia idea de lo que " son ".
gbr
2
@gbr Existe un acuerdo informal entre los desarrolladores de que las pruebas unitarias son pruebas que se ejecutan de forma aislada de los sistemas externos. Solo prueban el código en sí, no interacciones con archivos, bases de datos u otros servicios externos. Wikipedia documenta esta comprensión: en.wikipedia.org/wiki/Unit_testing#External_work .
jpmc26
1
@BerinLoritsch También es posible que todos interpretemos la pregunta de una manera diferente, de todos modos, no fue muy detallada y el autor aún no ha regresado a nadie. No estoy muy interesado en discutir más sobre la clasificación de estas pruebas de todos modos, lo importante es si deberían existir (estoy bastante seguro de que deberían) y con qué frecuencia hacer que se ejecuten (en cada cambio en el IDE, en cada Compromiso local, en cada impulso al repositorio central, en todo momento ...).
gbr
19

Es una mala práctica llamar a las pruebas que acceden a los archivos "Pruebas unitarias".

Él: "Estas cosas no pertenecen a las pruebas unitarias"

Usted: "Tiene sentido, pero no pude encontrar un lugar mejor para colocarlos. ¿Dónde pertenecen?"

Desafortunadamente, qué tipo de pruebas existen y cómo se organizan es completamente específico de la compañía. Por lo tanto, deberá averiguar cómo maneja su empresa estas pruebas.

Si aún no tiene una forma de ejecutar pruebas automáticas que no sean Pruebas unitarias, el enfoque pragmático es marcar las Pruebas unitarias que en realidad no son Pruebas unitarias con un prefijo, hasta que tenga suficientes para comenzar a averiguar qué tipo de pruebas que realmente tiene / necesita. Después de eso puedes comenzar a organizar.

Peter
fuente
2
Es una mala práctica llamar a las pruebas que acceden a los archivos "Pruebas unitarias". Aquí el archivo al que se accede es el archivo fuente . Se accederá tanto como cualquier archivo fuente (para analizarlo). El hecho de que la prueba probablemente no se realice en el mismo lenguaje de la "unidad" que se está verificando (SQL) la hace poco ortodoxa, pero no debe influir en su clasificación como prueba unitaria. continúa ...
GBR
1
... En realidad, la codificación correcta de un archivo es una "prueba" realizada por cualquier compilador cada vez que lee un archivo fuente. Aquí el problema es que al ser un archivo externo interpretado en tiempo de ejecución, las "pruebas del compilador" no se ejecutarán automáticamente, por lo que es completamente apropiado agregarlas explícitamente, y creo que puede considerarse legítimamente una "prueba unitaria" de ese Fragmento de SQL. Y parece razonable incluirlo en el (potencial) conjunto de pruebas ejecutadas en cada modificación del archivo.
gbr
3
Por cierto, lo que generalmente se recomienda no es acceder a archivos externos cuando se puede sustituir por un simulacro o algo por el estilo. Y según la mayoría de las definiciones, las pruebas unitarias pueden acceder a archivos externos o lo que sea, solo se recomienda enfáticamente, ya que puede ralentizar mucho las cosas. Una tienda es libre de prescribir que no puede agregar pruebas que acceden a los archivos al conjunto de pruebas que se ejecuta con mayor frecuencia, pero eso no hace que tales pruebas no sean dignas de la designación de "prueba unitaria", simplemente las hacen "no para ser puesto en el conjunto de pruebas ejecutadas con más frecuencia de este proyecto ".
gbr
2
@Warbo Es es una mala práctica para acceder a archivos (en general), y la razón (lo más importante) es que no se ralentizan si implican "GB leen sobre un enlace NFS escamosa", son lentos si, por ejemplo, citando las plumas Michael , toman 1/10 de segundo. Esto se debe a que desea ejecutar sus pruebas con la mayor frecuencia posible, idealmente en cada cambio que realice en el IDE, y cuando tenga muchas de ellas (como debería), incluso décimas de segundos se acumulan en horas. (continúa ...)
gbr
1
@Warbo ... Dicho esto, lo que importa es el tiempo total que toman, por lo que si tienes un proyecto muy pequeño que seguro que seguirá siendo pequeño, puedes ser mucho más indulgente con la velocidad de las pruebas individuales. Y si realmente no le importa ejecutarlos con frecuencia, es completamente libre de incluso hacer que llame a un empleado de OPMROC para obtener y enviar por fax un archivo desde un gabinete. También puede optar por ser más laxo mientras todavía tiene pocas pruebas y volver a acelerarlas cuando comienzan a tomar demasiado, pero debe tener en cuenta que esta es una deuda que está acumulando.
gbr
14

Michael Feathers dice esto en su libro Working Effectively With Legacy Code:

En la industria, la gente suele ir y venir sobre si las pruebas particulares son pruebas unitarias. [...] Vuelvo a las dos cualidades: ¿La prueba se ejecuta rápidamente? ¿Puede ayudarnos a localizar errores rápidamente?

¿Su prueba ayudará a localizar errores rápidamente y a ejecutarse rápidamente? Si es así, ¡hazlo! Si no, ¡no lo hagas! ¡Es tan simple como eso!

Dicho esto, estás trabajando en un entorno con otras personas y tienes que llevarte bien con ellas. Puede que tengas que terminar haciéndolo a su manera, incluso si no estás de acuerdo en privado.

CJ Dennis
fuente
Es una buena regla general, pero se habría librado de la confusión si hubiera escrito " si añadir pruebas particulares al conjunto de pruebas más frecuentemente ejecutadas ", en lugar de meterse con el término "prueba unitaria".
gbr
1
@gbr Si los resultados de la prueba son precisos, lo único importante es la rapidez con la que se ejecuta. Si tengo 100 pruebas que se ejecutan en menos de 0.1s, en total se ejecutarán en menos de 10s. Estoy feliz de ejecutarlos con frecuencia. Si tengo 1000 pruebas, tomarán hasta 1m40s. Eso es demasiado tiempo, no los ejecutaré con frecuencia, pero los ejecutaré una vez que haya realizado los cambios con el grupo más pequeño de 100 pruebas. No me importa si técnicamente es una prueba de aceptación o algo más. Si me ayuda a encontrar errores antes, lo haré independientemente de la semántica. Una prueba solo proporciona valor cuando se ejecuta.
CJ Dennis el
Principalmente estoy de acuerdo (la independencia es otra cosa muy importante, por ejemplo), pero no obstante, hubiera sido mejor si Michael Feathers no hubiera agravado la confusión sobre lo que significa "prueba unitaria". No es que él sea particularmente el culpable de esa confusión (y su libro es excelente, en las partes que he leído hasta ahora). Estaba haciendo un punto bastante menor, de todos modos.
gbr
@gbr Él no está redefiniendo las pruebas unitarias, está diciendo que ese no debería ser su criterio de inclusión. Su criterio debe ser la utilidad, y eso es lo que está definiendo.
CJ Dennis
Releyé esa sección; No estoy seguro, no me queda claro si se trata de una definición (más o menos) o simplemente un criterio. Pero en realidad " ¿Puede ayudarnos a localizar errores rápidamente " podría implicar las cosas que dice antes, sobre el aislamiento, etc. Por lo que podría haber hecho un alboroto por nada (aunque su respuesta a solas todavía podría ser mal interpretado)
GBR
10

He escrito pruebas similares, en ocasiones, contra archivos de código fuente, archivos de configuración, etc. No los llamaría pruebas unitarias porque (a) están accediendo al sistema de archivos y pueden no ser ultrarrápidos (b) No me importa si se ejecutan en cada check-in (en lugar de todas las noches en un Servidor CI).

Puede llamarlos pruebas de integración; ciertamente, están más cerca de esa perspectiva que las pruebas unitarias.

Mi propio término para ellos es pruebas de recursos . En mi humilde opinión, están completamente justificados si se ejecutan todas las noches en un servidor de CI: hay un costo mínimo y, cuando se usan con prudencia, claramente agregan valor. Una definición de juicioso : si la prueba está verificando un problema que causó un problema (como la codificación que usted menciona).

Michael Easter
fuente
4

Una prueba unitaria se trata de probar un método o 'unidad' de código. Estás probando el grupo más pequeño de lógica y código en tu software.

Más tarde, cuando se una a otras unidades, realizará pruebas de integración.

Espero que el líder de su equipo haya alentado su iniciativa y debería haberle ofrecido sugerencias alternativas. Definitivamente tienes la idea correcta.

Su SQL es un código como cualquier lenguaje de generación inferior como C # o Java y debe probarse como tal. Y la verificación y validación pertenecen a todos los niveles de prueba. Por lo tanto, las instrucciones de codificación y SET están incluidas, pero no necesariamente se prueban exclusivamente. Por lo general, como terminaciones de línea o cerramientos, generalmente puede usar un gancho o función SCM.

La mejor práctica es tener pruebas de regresión para garantizar que los errores pasados ​​no se reintroduzcan. En general, las pruebas se crean junto con cualquier resolución del error. Si estos errores no están cubiertos por las pruebas de regresión a nivel de unidad / integración o sistema y luego se reintroducen, es un problema de equipo, un problema de proceso, no individual.

La cuestión es ... los errores de sintaxis, las declaraciones que faltan o los bloques lógicos dentro de una 'unidad' generalmente no se prueban. Está probando las entradas y salidas de la unidad en diferentes combinaciones, probando las muchas posibilidades que podrían generarse.

Volviendo a las declaraciones SET perdidas: ayudan a informar las muchas posibilidades de entrada y salida para probar. ¿Qué prueba escribirías que FALLARÍA si te faltara un SET elegido?

Ross
fuente
La prueba de "unidad de código" es un enfoque para la prueba de unidad. En mi experiencia, esto lleva a pruebas frágiles e hinchazón masiva (por ejemplo, burla excesiva). Un enfoque alternativo, y en mi humilde opinión, para las pruebas unitarias es la "unidad de funcionalidad". No importa si alguna funcionalidad (por ejemplo, "configurar una cookie cuando se inicia sesión") requiere un método o una docena de procesos de comunicación, sigue siendo una unidad.
Warbo
@Warbo: lo llamaría más cercano a (pero no) las pruebas de integración. Las pruebas unitarias no requieren nada excesivo o masivo. Las pruebas unitarias deben ser pequeñas y rápidas. En realidad, las pruebas por funcionalidad conducen a lo que usted describe. Las pruebas frágiles son 1. que son más grandes o hacen más de lo que deberían. 2. altamente acoplado 3. no tiene una sola responsabilidad.
Ross
3

Si tiene archivos que se convierten en parte de su producto, entonces su contenido debe ser correcto. No hay razón por la que no verifiques esto. Por ejemplo, si necesita seis imágenes de 1024x 1024 en alguna carpeta, escriba una prueba unitaria que compruebe que tiene exactamente eso.

Pero probablemente no solo tenga los archivos, también tiene un código que lee los archivos. Podrías escribir una prueba unitaria para ese código. En el ejemplo anterior, la función para leer una de las seis imágenes devuelve una imagen de 1024 x 1024 en la memoria (o lo que se suponía que debía producir).

De todos modos, puede que no sea una prueba unitaria, pero es una prueba útil. Y si usa un marco de prueba de unidad que le permite hacer una prueba útil (que no es una prueba de unidad), ¿por qué no usar el marco de prueba de unidad?

gnasher729
fuente
2

Quizás estoy malinterpretando su problema, pero para mí esto suena como un problema que no debería necesitar ser capturado por ningún tipo de prueba dedicada, sino simplemente por el sistema de control de versiones . Cualquier cambio en una base de código debe revisarse parche por parche antes de comprometerse. Una forma simple de hacer esto en git es agregar los cambios con

git add -p

Para cada cambio en un archivo de texto, el directorio de trabajo le preguntará si realmente desea conservarlo. Eso le permitiría ver, por ejemplo, la eliminación de esas " SETdeclaraciones iniciales ".

En caso de que la codificación de un archivo completo cambiara, sucedería algo diferente: el algoritmo no lograría diferenciar el archivo antiguo y el nuevo y, por git add -plo tanto , no agregaría nada en absoluto. Esto sería visible en el otro comando que haría antes de cualquier confirmación, a saber

git status

Aquí te gustaría ver el archivo resaltado en rojo, indicando que no son cambios. Investigar por qué estos no lo lograron git add -prápidamente haría obvio el problema.

a la izquierda
fuente
por favor, ¿cómo ayuda esto a cualquier futuro desarrollador a evitar exactamente el mismo problema? ... lo que pasa con las pruebas automatizadas (también válidas para las afirmaciones y el diseño por contrato) es que, bueno, erm, están automatizadas .
vaxquis el
@vaxquis previene exactamente el mismo problema, aunque de manera algo casual, como efecto secundario de un flujo de trabajo que es una buena idea por diferentes razones. Mi punto es que este problema podría suceder en todos los casos muestra que el equipo de OP no hizo un buen uso de su VCS. - Nada en contra de las pruebas automatizadas, pero su valor es probar las propiedades semánticas que pueden romperse por cambios inocuos en la lógica del programa. No es para verificar todas las posibles formas estúpidas en que el código fuente puede cambiar.
Leftaroundabout
según su lógica, no necesitamos cinturones de seguridad; solo tenemos que conducir con más cuidado y causar menos accidentes ... Se perdió el punto principal que OP planteó: el de un error humano . Ninguna cantidad de VCS puede protegerte de eso . Además, FWIW: si una prueba puede automatizarse, debería automatizarse. Los humanos son siempre los eslabones más débiles en los procesos de ingeniería. gites el mejor ejemplo de eso: una gran herramienta, pero apenas inutilizable para simples mortales .
vaxquis el
@vaxquis ¡No, no! Los cinturones de seguridad son análogos al tipo de pruebas que tienen sentido: captan una amplia gama de situaciones que pueden ocurrir por accidente. Una prueba de codificación de archivos sería análoga a un robot que te sigue y evita que te asfixies llenando los frijoles por la nariz.
Leftaroundabout
Según el OP, los archivos en el formato incorrecto ya han sucedido dos veces , por lo que aparentemente es probable que ocurran por accidente.
gnasher729
1

Otro ángulo a considerar: dado que esas dos condiciones son requisitos para que su programa se ejecute, ¿no debería incrustar la lógica cerca de la lógica de ejecución? Quiero decir: prueba la existencia de un archivo antes de leerlo y / o valida su contenido, ¿verdad? Entonces, ¿cómo es esto diferente? Creo que, dado que se trata de un recurso externo de código, debe validarse en tiempo de ejecución, antes de que se use realmente. Resultado: aplicación más fuerte, no es necesario escribir pruebas adicionales.

Dr. Gianluigi Zane Zanettini
fuente
1
¿Cómo la falla solo en tiempo de ejecución la convierte en una aplicación más sólida? Claro, puede ser apropiado también tener verificaciones de tiempo de ejecución cerca de la fuente del problema, pero si puede detectar errores antes de que causen problemas de tiempo de ejecución, es mucho mejor, ¿no cree? ¿Estás seguro de que estás familiarizado con las pruebas automáticas?
gbr
1
"¿Cómo la falla solo en tiempo de ejecución la convierte en una aplicación más sólida?" Lanza una excepción si el cheque falla. En su prueba, simplemente verifique que la sección de código que se está probando devuelve el resultado esperado: esto elimina la carga para verificar una razón más del error.
Dr. Gianluigi Zane Zanettini
1
Su estrategia no tiene (casi) nada que ver con pruebas unitarias y pruebas automatizadas en general, es algo diferente, con diferentes usos.
gbr
1
Iba a sugerir esto. El error es un detalle de implementación; ¡Imagino que las respuestas serían muy diferentes si la codificación dudosa estuviera en un campo privado en lugar de un archivo independiente! Parece que OP tiene 2 problemas: los archivos de recursos pueden estar mal codificados y la producción se comporta de manera diferente a la del desarrollador. Al verificar el archivo en tiempo de ejecución, justo antes de que se use, resolvemos el segundo problema: dev y prod arrojarán el mismo error. Las pruebas unitarias pueden centrarse en la funcionalidad real en lugar de los detalles de implementación; Estos controles "internos" se ejercerán como métodos privados.
Warbo 01 de
1
@ Dr.GianluigiZaneZanettini Bah ... Me rindo ... Tal como lo veo, en el mejor de los casos, su respuesta, después de sus "aclaraciones" en los comentarios, estaba fuera de tema (no una respuesta a la pregunta), pero en realidad, tal como está, ¡está completamente equivocado! no es necesario escribir pruebas adicionales ??? No tengo suficiente reputación como para rechazarlo, pero considero que lo hice. Y no creo que haya mucho valor en continuar esta conversación.
gbr
1

Las pruebas son el mismo código que cualquier otro y, si son lo suficientemente complejas, también se benefician de ... pruebas unitarias. Parece más simple agregar tales verificaciones de precondición directamente en la prueba.

La mayoría de las pruebas son lo suficientemente simples como para no requerir esto, pero si algunas son lo suficientemente complejas, no veo nada fundamentalmente incorrecto con estas comprobaciones previas. Por supuesto, la prueba también debería fallar sin ellos, pero una buena prueba de unidad también indica qué unidad está fallando.

Un script que se usa como parte de la prueba y debe tener cierto contenido y codificación es probablemente una unidad. Puede tener mucho más código y lógica que el resto de la prueba. Una prueba con dicho script no es el mejor diseño de la historia y, si es posible, debe refactorizarse en algo más directo (a menos que sea una prueba de integración).

h22
fuente
1
el autor no dice en ninguna parte que esa secuencia de comandos SQL es una parte de alguna prueba, que parece haber leído mal la pregunta
GBR
Es difícil de entender, supongo que el script SQL es parte de la prueba.
h22
su comentario "Hay difícil de entender" ...
GBR
Difícil de comprender. Desestimando la pregunta.
h22
1

En primer lugar, uno de los propósitos de las pruebas es evitar que los problemas se repitan en su código, por lo que absolutamente debe seguir escribiendo pruebas de esta naturaleza.

En segundo lugar, nombrar es difícil. Sí, claramente estas no son "pruebas unitarias", pero pueden ser partes deseables y necesarias del proceso de compilación, porque lo protegen de errores obvios y porque le brindan retroalimentación sobre los errores antes (especialmente dado que no ve el consecuencias en una caja de desarrollo).

Por lo tanto, la pregunta realmente es (debería estar en su contexto) más sobre cuándo y cómo se ejecutan estas pruebas de lo que son.

He utilizado este tipo de prueba ampliamente en el pasado, nos han ahorrado una buena cantidad de dolor.

Murph
fuente
Y si alguien quisiera explicar el voto negativo, lo agradecería
Murph
1

Las pruebas unitarias consisten en ejecutar una unidad de código aisladamente para confirmar que está produciendo el resultado correcto para la entrada correcta. El aislamiento debe hacer que tanto la unidad bajo prueba como la prueba en sí sean repetibles, es decir, no deben depender ni introducir efectos secundarios.

SQL no es exactamente algo que se pueda probar de forma aislada, por lo que cualquier prueba de SQL no es exactamente una prueba unitaria y, salvo las declaraciones SELECT, es casi seguro que tendrá un efecto secundario. Podemos llamarlo una prueba de integración en lugar de una prueba unitaria.

Siempre es aconsejable asegurarse de que cualquier defecto que pueda introducirse pueda detectarse lo antes posible en el ciclo de desarrollo, y sea beneficioso hacerlo de una manera que facilite la identificación de la fuente del defecto para que pueda ser rápidamente corregido

Las pruebas en cuestión pueden reubicarse más apropiadamente fuera del cuerpo de las "pruebas unitarias" y ubicarse en otro lugar, pero no deben eliminarse por completo si están haciendo algo útil como evitar la posible introducción de un defecto que podría llevar horas rastrear abajo.

Zenilogix
fuente