001package org.junit.rules;
002
003import 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 */
027public 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}