Si funciono con la siguiente prueba, falla:¿Por qué puedo "falsificar" el rastro de la pila de una excepción en Java?
public class CrazyExceptions {
private Exception exception;
@Before
public void setUp(){
exception = new Exception();
}
@Test
public void stackTraceMentionsTheLocationWhereTheExceptionWasThrown(){
String thisMethod = new Exception().getStackTrace()[0].getMethodName();
try {
throw exception;
}
catch(Exception e) {
assertEquals(thisMethod, e.getStackTrace()[0].getMethodName());
}
}
}
con el siguiente error:
Expected :stackTraceMentionsTheLocationWhereTheExceptionWasThrown
Actual :setUp
traza La pila es simple y llanamente mentira.
¿Por qué no se reescribe la traza de la pila cuando se lanza la excepción? No soy un desarrollador de Java, y tal vez me falta algo aquí.
No sé si hace 6 años podríamos establecer el rastro de pila como "causa" de la excepción, pero es mejor usar esto después de crear la nueva excepción y antes de lanzarla: Exception.initCause (Throwable), donde se configura la causa stacktrace con setStackTrace(). –