从静态上下文中获取测试类名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从静态上下文中获取测试类名称相关的知识,希望对你有一定的参考价值。

目前我正在尝试在静态上下文中获取从BaseTest继承的任何基础类的类名。因此,为了解释,我正在编写一个使用junit的@BeforeClass的基类。这里的问题是我在类的所有测试之前启动一个假应用程序,它在内存h2数据库中是自己的。我想将数据库命名为测试类,因此我稍后可以看到每次测试写入数据库的内容。

BaseTest:

public abstract class BaseTest {
private static final Map<String, String> testConfig = getTestConfig();
private static FakeApplication fakeApplication;

@BeforeClass
public static void onlyOnce(){
    fakeApplication = Helpers.fakeApplication(testConfig);
    Helpers.start(fakeApplication);
}

@AfterClass
public static void afterClass(){
    Helpers.stop(fakeApplication);
    fakeApplication = null;
}

private static Map<String, String> getTestConfig() {
    //Here should bee FooTest in this case! But actually it's BaseTest
    String className = MethodHandles.lookup().lookupClass().getSimpleName();
    ...
    configs.put("db.default.url", "jdbc:h2:file:./data/tests/" + className  + ";AUTO_SERVER=TRUE;MODE=Oracle;DB_CLOSE_ON_EXIT=FALSE");
}

例如一些儿童测试:

public class FooTest extends BaseTest{
     @Test 
     public void testFoo(){
     }
}

我已经尝试了几件事,据我所知,这是不可能的。但我只想问一下我还有什么不知道的。

答案

我找到了使用'@ClassRule'并实现自定义qazxsw poi的解决方案。由于在TestWatcher方法之前调用了qazxsw poi,我可以像这样使用它:

这是我的代码:

starting(Description description)

以上是关于从静态上下文中获取测试类名称的主要内容,如果未能解决你的问题,请参考以下文章

static关键字静态代码块

如何在获取之前更改托管对象类名称

获取 C# 类名称列表?

了解 Ruby on Rails 6 中的路由 + 模块/类名称 [以及在此上下文中模块是啥]

面向对象,类名称空间,查找顺序,组合

如何更改片段中的主要活动变量