Se corro il seguente test, non riesce:Perché è possibile "falsificare" la traccia dello stack di un'eccezione in 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 il seguente errore:
Expected :stackTraceMentionsTheLocationWhereTheExceptionWasThrown
Actual :setUp
Lo stack trace è solo flat out mentendo.
Perché la traccia dello stack non viene riscritta quando viene generata l'eccezione? Non sono uno sviluppatore Java e forse mi manca qualcosa qui.
Non so se 6 anni fa potremmo impostare lo stack trace "causa" dell'eccezione, ma è meglio usarlo dopo aver creato la nuova eccezione e prima di lanciarlo: Exception.initCause (Throwable), dove si configura la causa stacktrace con setStackTrace(). –