Jeśli uruchomić następujący test, to nie:Dlaczego mogę "podrobić" ślad stosu wyjątku w Javie?
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());
}
}
}
z powodu następującego błędu:
Expected :stackTraceMentionsTheLocationWhereTheExceptionWasThrown
Actual :setUp
Stos ślad jest tylko flat out kłamie.
Dlaczego ślad stosu nie został przepisany po zgłoszeniu wyjątku? Nie jestem programistą Java i może brakuje mi tutaj czegoś.
Nie wiem, czy 6 lat temu mogliśmy ustawić ślad stosu "przyczyny" wyjątku, ale lepiej jest użyć tego po utworzeniu nowego wyjątku i przed jego wyrzuceniem: Exception.initCause (Throwable), gdzie konfigurujesz przyczyna stacktrace z setStackTrace(). –