Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

296
Views
TDD: ¿Cómo realizar pruebas unitarias de funciones que dependen de otras funciones?

Supongamos que tengo una función A que toma una cadena. La función A llama a la función B desde el mismo archivo, que toma esa cadena y la modifica. La función A luego devuelve un valor basado en la cadena de salida modificada de la función B.

¿Cómo debo escribir mejor las pruebas unitarias para la función A dado que depende de la salida de B? Si mi comprensión es correcta, las pruebas unitarias deberían probar la lógica de una función independientemente de sus dependencias. Siguiendo esta línea de pensamiento, estaba pensando en burlarme de la función B y su salida para que la prueba de A no fallara necesariamente si la función B no funcionaba. ¿Es correcta esta línea de pensamiento? Ejemplo de caso a continuación:

 const functionA = (string, table) => { const hex = functionB(string); return table[hex]; } const functionB = (string) => { //some kind of hexing function here return hexed string }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La respuesta habitual es simplemente escribir sus pruebas para A sin burlarse de B.

La explicación es que "probar una función independientemente de sus dependencias" no era en realidad una prioridad. Beck, Jeffries y otros utilizaron la ortografía "Prueba unitaria", pero no lo dijeron en el sentido habitual. Más tarde, probaron "prueba de desarrollador" y "prueba de programador" como etiquetas, pero para entonces se había instalado la costumbre y el daño ya estaba hecho.

Una forma de ver que esto debe ser cierto es considerar escribir pruebas para una "unidad" y luego realizar una refactorización que extraiga otro método: las pruebas originales aún funcionan, aunque el sujeto de prueba ya no sea una sola "unidad". ".


Hay, por supuesto, casos en los que querrá introducir una implementación sustituta para B al probar A

  • la B real hace que A sea costosa de probar
  • los comportamientos de la B real son inestables, lo que hace que las pruebas A sean caras de mantener
  • el diseño que intenta impulsar es el protocolo entre A y B

(Su preocupación parece ser la del medio).


Otro enfoque posible es extraer otra función de A

 const functionA = (string, table) => { return functionC(string, table, functionB); } const functionB = (string) => { //some kind of hexing function here return hexed string } const functionC = (string, table, fn) { const hex = fn(string); return table[hex]; }

Aquí, la función A es "tan simple que obviamente no hay deficiencias"; hemos trasladado todo el riesgo a functionC. El "stub" / "test-double" que queremos usar como sustituto de functionB es solo otro argumento.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!