Junit establece una variable local.
Estoy utilizando un archivo jar adicional en mi proyecto spring boot. El problema es que uno de los métodos que quiero probar está utilizando un método de ese jar que devuelve un valor, pero también establece un valor en una variable que se le pasa.
String valueThatWillBeReturned;
int returnMessage = method(valueThatWillBeReturned);
No sé por qué el método está escrito de esa manera. No soy el autor del jar y no puedo depurarlo, pero funciona así. Devolverá un int que se almacenará en int returnMessage, y también establecerá valueThatWillBeReturned que se le pasa.
Es un problema para mí probarlo. Estoy estableciendo el valor de int returnMessage por:
when(external.method(valueThatWillBeReturned).thenReturn(1);
Pero ¿cómo debería establecer el valor de String valueThatWillBeReturned?
El problema principal es que mi código depende de String valueThatWillBeReturned que debe ser devuelto.
Después de la edición:
He simplificado el ejemplo anterior, pero le daré detalles adicionales. Estoy utilizando una biblioteca externa ImageSDK.jar. Utiliza archivos .dll o .so dependiendo del sistema operativo.
Entonces, según la documentación, debería tener int[] pnMatchTemplate2Index = new int[1] para pasar al siguiente método.
int result = libSDK.UFM_Identify(hMatcherContainer[0],
templateForIdentification,
sizeOfTemplateForIdentification,
templatesFromDBForIdentification,
sizeOfEachTemplateFromDB,
numberOfTemplatesForCompare,
5000,
pnMatchTemplate2Index);
Lo que el método devuelve es un int result que almacena el estado de retorno, pero el método también establece pnMatchTemplate2Index donde se almacena el índice de la plantilla coincidente. Después, estoy usando templates.get(pnMatchTemplate2Index[0]) para obtener la información que necesito.
Entonces, al final, mi método depende de ese parámetro para devolver un valor, y no sé cómo establecerlo mediante Junit para probar el retorno de mi método.
davy.ai
Al probar este método, puede utilizar Mockito para simular el comportamiento de la función externa que establece el
valorQueSeRetornará
. Aquí hay un ejemplo de cómo hacerlo:En primer lugar, cree un objeto simulado para la función externa:
Luego, defina el comportamiento del método usando
doAnswer()
yAnswer
:Esto establecerá el
valorQueSeRetornará
a “foo” y devolverá 1 cuando se llame aexternal.method()
.Luego, en su método de prueba, puede pasar una matriz de
String
con un elemento (inicialmentenull
) y comprobar que el valor se ha establecido en “foo”:Tenga en cuenta que necesita pasar una matriz de
String
como argumento aexternal.method()
, y establecer el valor en el primer elemento de la matriz. Esto se debe a que el método espera una matriz que pueda modificar en su lugar.