| package org.junit.tests.listening; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotSame; |
| |
| import org.junit.Test; |
| import org.junit.runner.Description; |
| import org.junit.runner.JUnitCore; |
| import org.junit.runner.Result; |
| import org.junit.runner.notification.Failure; |
| import org.junit.runner.notification.RunListener; |
| |
| public class TestListenerTest { |
| |
| int count; |
| |
| class ErrorListener extends RunListener { |
| @Override |
| public void testRunStarted(Description description) throws Exception { |
| throw new Error(); |
| } |
| } |
| |
| public static class OneTest { |
| @Test |
| public void nothing() { |
| } |
| } |
| |
| @Test(expected = Error.class) |
| public void failingListener() { |
| JUnitCore runner = new JUnitCore(); |
| runner.addListener(new ErrorListener()); |
| runner.run(OneTest.class); |
| } |
| |
| class ExceptionListener extends ErrorListener { |
| @Override |
| public void testRunStarted(Description description) throws Exception { |
| count++; |
| throw new Exception(); |
| } |
| } |
| |
| @Test |
| public void reportsFailureOfListener() { |
| JUnitCore core = new JUnitCore(); |
| core.addListener(new ExceptionListener()); |
| |
| count = 0; |
| Result result = core.run(OneTest.class); |
| assertEquals(1, count); |
| assertEquals(1, result.getFailureCount()); |
| Failure testFailure = result.getFailures().get(0); |
| assertEquals(Description.TEST_MECHANISM, testFailure.getDescription()); |
| } |
| |
| @Test |
| public void freshResultEachTime() { |
| JUnitCore core = new JUnitCore(); |
| Result first = core.run(OneTest.class); |
| Result second = core.run(OneTest.class); |
| assertNotSame(first, second); |
| } |
| } |