blob: ef7baad764cb5eb03194dc797772162688519fcc [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.stubbing.answers;
import org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.objenesis.ObjenesisHelper;
import static org.mockito.internal.exceptions.Reporter.notAnException;
import java.io.Serializable;
public class ThrowsExceptionClass implements Answer<Object>, Serializable {
private final Class<? extends Throwable> throwableClass;
private final ConditionalStackTraceFilter filter = new ConditionalStackTraceFilter();
public ThrowsExceptionClass(Class<? extends Throwable> throwableClass) {
this.throwableClass = checkNonNullThrowable(throwableClass);
}
private Class<? extends Throwable> checkNonNullThrowable(Class<? extends Throwable> throwableClass) {
if(throwableClass == null || !Throwable.class.isAssignableFrom(throwableClass)) {
throw notAnException();
}
return throwableClass;
}
public Object answer(InvocationOnMock invocation) throws Throwable {
//TODO centralize the use of Objenesis. Why do we use ObjenesisHelper?
Throwable throwable = ObjenesisHelper.newInstance(throwableClass);
throwable.fillInStackTrace();
filter.filter(throwable);
throw throwable;
}
public Class<? extends Throwable> getThrowableClass() {
return throwableClass;
}
}