001    package org.junit.rules;
002    
003    import org.junit.runner.Description;
004    
005    /**
006     * The TestName Rule makes the current test name available inside test methods:
007     *
008     * <pre>
009     * public class TestNameTest {
010     *  &#064;Rule
011     *  public TestName name= new TestName();
012     *
013     *  &#064;Test
014     *  public void testA() {
015     *      assertEquals(&quot;testA&quot;, name.getMethodName());
016     *     }
017     *
018     *  &#064;Test
019     *  public void testB() {
020     *      assertEquals(&quot;testB&quot;, name.getMethodName());
021     *     }
022     * }
023     * </pre>
024     *
025     * @since 4.7
026     */
027    public class TestName extends TestWatcher {
028        private volatile String name;
029    
030        @Override
031        protected void starting(Description d) {
032            name = d.getMethodName();
033        }
034    
035        /**
036         * @return the name of the currently-running test method
037         */
038        public String getMethodName() {
039            return name;
040        }
041    }