lvr123
lvr123

Reputation: 584

jUnit4.0 : how to know current test method name?

I've implemented a feature in my jUnit tests that takes, for every test case, a fresh copy of a data source. This copy is taken in a folder specific for each test case. The idea is that every test case can start from a clean situation, manipulate it and let it as such after the run. This is often useful when the test fails for analysing the problem.

For now I have to call this feature directly in the test method because I don't know how to retrieve the current test name:

public void testTest1() {
   TestHelper th=TestHelper.create("testTest1",subPathToDataSource);
   // do the test...
   Path dataPath = th.getDataPath();
   ...
   }

I would like to be able to write something like this:

Path dataPath;

@Before
public initTest() {
   th=TestHelper.create(SomeJUnitObject.getCurrentTestName(),subPathToDataSource);
   ...
   }

public void testTest1() {
   // do the test...
   Path dataPath = th.getDataPath();
   ...
   }

Until now I found as answers : "You don't need to know that"... But I do need it ! Is this possible ?

Kind regards

Upvotes: 0

Views: 126

Answers (2)

ptyx
ptyx

Reputation: 4164

Look at the TestName rule.

You should be able to add in your test class:

@Rule TestName name=new TestName();

And then access it.

(On phone, so can't check versions support/details - might be 4.x only)

Upvotes: 2

fge
fge

Reputation: 121712

Here is an alternative approach; create an abstract class which your "real" test classes inherit.

I have several such examples in my projects and here I will give one, mainly testing for individual JSON Patch operations.

All my test files are JSON, and located under an appropriately named resource directory. The base, abstract class is JsonPatchOperationTest. And here is the full code of AddOperationTest which tests for JSON Patch's add operation:

public final class AddOperationTest
    extends JsonPatchOperationTest
{
    public AddOperationTest()
        throws IOException
    {
        super("add");
    }
}

And that's it! Not even one test method in this class, but of course your implementation may vary.

In your case you probably want to pass the directory name as a constructor argument, or the like.

Upvotes: 0

Related Questions