jUnit4.0:如何知道当前的测试方法名称?

时间:2014-03-30 13:36:05

标签: java junit

我在jUnit测试中实现了一个功能,它为每个测试用例提供了一个数据源的新副本。此副本在特定于每个测试用例的文件夹中获取。这个想法是每个测试用例都可以从一个干净的情况开始,操作它并在运行后让它这样。当测试无法分析问题时,这通常很有用。

现在我必须直接在测试方法中调用此功能,因为我不知道如何检索当前的测试名称:

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

我希望能够写出这样的内容:

Path dataPath;

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

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

到现在为止,我找到了答案:“你不需要知道”......但我确实需要它! 这可能吗?

亲切的问候

2 个答案:

答案 0 :(得分:2)

查看TestName规则。

您应该可以添加测试类:

@Rule TestName name=new TestName();

然后访问它。

(在手机上,因此无法检查版本支持/详细信息 - 可能仅为4.x)

答案 1 :(得分:0)

这是另一种方法;创建一个你的"真实"测试类继承。

我的项目中有几个这样的例子,在这里我将给出一个,主要是testing for individual JSON Patch operations

我的所有测试文件都是JSON,位于适当命名的资源目录下。基础抽象类是JsonPatchOperationTest。以下是AddOperationTest完整代码,用于测试JSON Patch的添加操作:

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

那就是它!这个类中甚至没有一种测试方法,但当然你的实现可能会有所不同。

在您的情况下,您可能希望将目录名称作为构造函数参数传递,或者类似。