Necesito realizar un conjunto de pruebas unitarias para una función que ordena una matriz en función de una combinación de 4 parámetros. La naturaleza de las funciones hace que tenga muchos casos extremos y necesito probarlos todos.
Para esto, planeo crear un conjunto de matrices Stub tanto para las entradas como para las salidas de la función. Pero tengo problemas para nombrar estos objetos auxiliares.
Mi primer pensamiento fue tener 2 stubs para cada caso de prueba, uno para la matriz inicial y otro para la matriz ordenada. Tal vez haciendo algo como esto:
//test case: should prioritize duration over raw priority export const DifferentPriorityAndDurationStub = () => { const t1 = {priority: 1, duration: 20}; const t2 = {priority: 2, duration: 30}; return [t1, t2]; }; export const DifferentPriorityAndDurationStubResult= () => { const t1 = {priority: 1, duration: 20}; const t2 = {priority: 2, duration: 30}; return [t2, t1]; };Luego, en la prueba real:
describe('Custom Sorter', () => { it('should prioritize duration over raw priority', () => { const originalArray = DifferentPriorityAndDurationStub(); const result = DifferentPriorityAndDurationStubResult(); expect(customSorter.sort( originalArray )).toEqual(result ); }); });Mi problema con este enfoque es que si alguien necesita trabajar en la función, el código de la prueba no les diría exactamente qué hay en las entradas y qué hay en la salida, tendrían que ir al archivo de resguardos. Creo que esto hace que sea difícil entender cómo deberían funcionar las funciones de clasificación en este caso específico.
La otra forma en que pensé fue algo como:
export const Priority1Duration20 = () => { return {priority: 1, duration: 20}; }; export const Priority2Duration30 = () => { return {priority: 2, duration: 30}; };Y en mi prueba hacer algo como esto:
describe('Custom Sorter', () => { it('should prioritize duration over raw priority', () => { const Priority1Duration20 = Priority1Duration20(); const Priority2Duration30 = Priority2Duration30(); expect(customSorter.sort( [Priority1Duration20, Priority2Duration30] )) .toEqual([Priority2Duration30,Priority1Duration20]); }); });Creo que esto parece más legible si alguien necesita entender cómo funciona el código. Pero también me preocupa que necesito hacer cambios en el archivo Stubs y el archivo de prueba para cambiar o corregir ciertos casos de prueba. En el primer enfoque, solo necesitaría arreglar el trozo y eso sería todo.
¿Algunas ideas? ¿Cómo abordarías esto?