    001    package org.junit.rules;
    002
    003    import org.junit.runner.Description;
    004    import org.junit.runners.model.Statement;
    005
    006    /**
    007     * Verifier is a base class for Rules like ErrorCollector, which can turn
    008     * otherwise passing test methods into failing tests if a verification check is
    009     * failed
    010     *
    011     * <pre>
    012     *     public static class ErrorLogVerifier {
    013     *        private ErrorLog errorLog = new ErrorLog();
    014     *
    015     *        &#064;Rule
    016     *        public Verifier verifier = new Verifier() {
    017     *           &#064;Override public void verify() {
    018     *              assertTrue(errorLog.isEmpty());
    019     *           }
    020     *        }
    021     *
    022     *        &#064;Test public void testThatMightWriteErrorLog() {
    023     *           // ...
    024     *        }
    025     *     }
    026     * </pre>
    027     *
    028     * @since 4.7
    029     */
    030    public abstract class Verifier implements TestRule {
    031        public Statement apply(final Statement base, Description description) {
    032            return new Statement() {
    033                @Override
    034                public void evaluate() throws Throwable {
    035                    base.evaluate();
    036                    verify();
    037                }
    038            };
    039        }
    040
    041        /**
    042         * Override this to add verification logic. Overrides should throw an
    043         * exception to indicate that verification failed.
    044         */
    045        protected void verify() throws Throwable {
    046        }
    047    }