Estoy usando Mockito para las pruebas de JUnit. por lo que hay una clase dada A que se utiliza a partir del código Quiero probar:Mockito: cuando se llama al método A.a, ejecuta B.b
class A{
public A(){}
public final String a(String x){
return "A.a: " + x;
}
}
y quiero reemplazar el A.a llamada al método con otra llamada al método con los mismos argumentos y el mismo tipo de valor de retorno. Como puede ver, no es posible anular el método a extendiendo la clase ya que es final. Así que lo que tenemos ahora es otra clase B con el método B.b:
class B{
public B(){}
public String b(String x){
return "B.b: " + x;
}
}
Ahora quiero para asegurarse de que cada vez que A.a se llama desde el código, el valor de retorno de B.b se utiliza en su lugar. ¿Existe la posibilidad de lograr esto con Mockito (algo así como Mockito.when(A.a(x)).thenReturn(B.b(x));
) pero con el mismo parámetro x, sin saber el valor de x?
¡Cualquier ayuda sería apreciada, gracias de antemano!
¿Cuál es el escenario que desea probar? ¿Por qué A.a() es final? y ¿Por qué quiere reemplazar la llamada de A.a()? Por lo que entiendo, quieres anular A.a(), ¿verdad? – Adelin
Estoy probando un proyecto de biblioteca de Android (también uso Robolectric para poder probar proyectos de Android). En este caso particular, quiero probar una base de datos. El código llama a un solucionador de contenido, el proveedor de contenido está definido en AndroidManifest.xml y no he encontrado una manera de configurar el proveedor de contenido mediante programación, ya que no se carga desde el xml al ejecutar las pruebas. Así que quería que el código llamara al proveedor de contenido en lugar de a la resolución de contenido. – user1448982