Estoy tratando de simular un contexto de Android para devolver una cadena de una identificación de recurso. Sin embargo, tengo problemas para hacer coincidir el código auxiliar con la llamada, supongo que se debe a los varargs. Sin embargo, soy nuevo en mockk, por lo que podría perderme algo muy fácil.
Me burlo del contexto de esta manera:
val context = mockk<Context>() every { context.getString(any(), any()) } returns stringToReturnPero al llamar a getString en el objeto, arroja la siguiente excepción:
io.mockk.MockKException: no answer found for: Context(#1).getString(2131689544, [])Si es importante, llamo a la función en la clase bajo prueba similar a esto. formatArgs puede estar vacío pero no es necesario:
protected fun foo(stringResource: Int, vararg formatArgs: Any) { val s = context.getString(errorMessageStringResource, *formatArgs)¿Alguna idea de cómo puedo arreglar esto?
Puede verificar el proyecto y reproducir la excepción aquí: Proyecto Github
Hay un problema abierto relacionado en mockk v1.9: https://github.com/mockk/mockk/issues/224 (consulte también los problemas a los que se hace referencia)
Probé varias soluciones pero terminé creando funciones sobrecargadas solo para probar con mockk , por ejemplo.
class Context { // Renamed because of same JVM signature fun foo2(stringResource: Int, vararg formatArgs: Any) = foo(stringResource, formatArgs) // Function accepts fun foo(stringResource: Int, formatArgs: args: Array<out Any>) = ... } luego pruebe la función no vararg foo() con mockk .
Sé que es una solución fea, pero si encuentra una mejor, hágamelo saber :)
La versión 1.9.1 introduce algunos emparejadores adicionales para emparejar varargs.