1/* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 6package org.mockito.internal.stubbing.answers; 7 8import org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter; 9import org.mockito.invocation.InvocationOnMock; 10import org.mockito.stubbing.Answer; 11import org.objenesis.ObjenesisHelper; 12 13import static org.mockito.internal.exceptions.Reporter.notAnException; 14 15import java.io.Serializable; 16 17public class ThrowsExceptionClass implements Answer<Object>, Serializable { 18 19 private final Class<? extends Throwable> throwableClass; 20 private final ConditionalStackTraceFilter filter = new ConditionalStackTraceFilter(); 21 22 public ThrowsExceptionClass(Class<? extends Throwable> throwableClass) { 23 this.throwableClass = checkNonNullThrowable(throwableClass); 24 } 25 26 private Class<? extends Throwable> checkNonNullThrowable(Class<? extends Throwable> throwableClass) { 27 if(throwableClass == null || !Throwable.class.isAssignableFrom(throwableClass)) { 28 throw notAnException(); 29 } 30 return throwableClass; 31 } 32 33 public Object answer(InvocationOnMock invocation) throws Throwable { 34 //TODO centralize the use of Objenesis. Why do we use ObjenesisHelper? 35 Throwable throwable = ObjenesisHelper.newInstance(throwableClass); 36 throwable.fillInStackTrace(); 37 filter.filter(throwable); 38 throw throwable; 39 } 40 41 public Class<? extends Throwable> getThrowableClass() { 42 return throwableClass; 43 } 44} 45