Это уже обработано для вас фреймворком
Давайте рассмотрим небольшой пример (очень плохой код):
импортировать статический org.junit.Assert. *;
import org.junit.Test;
public class TestExpect {
@Test(expected=MyException.class)
public void test() throws MyException {
new Foo().foo();
}
}
С двумя классами исключений MyException и MyExtendedException, унаследованными от предыдущего, и простым классом Foo, подобным этому:
public class Foo {
public void foo() throws MyException{
throw new MyExtendedException();
}
}
При запуске теста с использованием Eclipse Runner печатается зеленая полоса, потому что тест вызывает один экземпляр Myexception (это отношение в POO)
Если вы предпочитаете читать исходный код, это отрывок из исходного кода Junit (ExpectException.java):
@Override
public void evaluate() throws Exception {
boolean complete = false;
try {
fNext.evaluate();
complete = true;
} catch (AssumptionViolatedException e) {
throw e;
} catch (Throwable e) {
if (!fExpected.isAssignableFrom(e.getClass())) {
String message= "Unexpected exception, expected<"
+ fExpected.getName() + "> but was<"
+ e.getClass().getName() + ">";
throw new Exception(message, e);
}
}
if (complete)
throw new AssertionError("Expected exception: "
+ fExpected.getName());
}