Estoy intentando burlarme de algunos métodos basados en la reflexión. A continuación puede ver los detalles,Llamadas basadas en Reflexión burlona
clase bajo prueba
public class TracerLog {
@AroundInvoke
public Object logCall(InvocationContext context) throws Exception {
Logger logger = new Logger();
String message = "INFO: Invoking method - "
+ context.getMethod().getName() + "() of Class - "
+ context.getMethod().getDeclaringClass();
logger.write(message);
return context.proceed();
}
}
prueba
public class TracerLogTest {
@Mock
InvocationContext mockContext;
@Mock
Logger mockLogger;
@InjectMocks
private TracerLog cut = new TracerLog();
@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void logCallTest() throws Exception {
when(mockContext.proceed()).thenReturn(true);
when(mockContext.getMethod().getDeclaringClass().getName()).thenReturn("someClass");
cut.logCall(mockContext);
verify(mockContext).proceed();
}
}
o
@Test
public void logCallTest() throws Exception {
when(mockContext.proceed()).thenReturn(true);
when(mockContext.getMethod().getName()).thenReturn("someMethod");
when(mockContext.getMethod().getDeclaringClass().getName()).thenReturn("someClass");
cut.logCall(mockContext);
verify(mockLogger).write(anyString());
verify(mockContext).proceed();
}
embargo, las pruebas fallan con una NullPointerException . Entiendo que estoy haciendo algo mal contra los conceptos de burla, pero no entiendo de qué se trata. ¿Podría por favor arrojar algo de luz sobre él y también sugerirme cómo se puede probar este método?
Gracias.
¿Cómo está creando sus objetos simulados y su objeto bajo prueba? ¿Puedes publicar toda tu clase de prueba, en lugar de solo el método de prueba? Gracias. –
@DavidWallace He editado la pregunta para incluir el código completo. – Bala