从扩展类中提取单元测试方法名



我目前使用BaseTest类在每次测试之前做一些基本的测试设置。对于我们的一个测试应用程序,我们通过驱动程序设置将测试的名称传递给应用程序。像这样:

WebDriver driver = getDriver();
driver = appName.open(driver, "testName");

在过去,我们总是在每个测试中这样做…

public class testClass extends BaseTest {
@Test
public void TestAThing() throws Exception {
WebDriver driver = getDriver();
driver = appName.open(this.driver, "TestAThing");
//do something
}
}

但是我试图在我们的BaseTest类中设置它,以便我们可以在@BeforeEach注释下做到这一点,并且我们不再需要在每个测试中做它。但很明显,为了做到这一点,我必须能够获得正在运行的Test方法的名称,而不是我的BaseTest方法的名称,我不太清楚如何做到这一点。我知道getMethodName(),它显然只是获取当前方法的名称,所以像这样:

public class BaseTest {
@BeforeEach
public void setupTest() {
String methodName = new Throwable()
.getStackTrace()[0]
.getMethodName();
driver = appName.open(driver, methodName);
}
}

设置methodName = setupTest,我需要将其设置为TestAThing。到目前为止,我想到的所有内容都与@Rule注释或TestRule有关,但如果我没有弄错的话,这些仍然需要在测试级别实现。有没有人有任何想法如何拉在任何测试我在它使用我的BaseTest类的信息?

User program有我在评论中寻找的解决方案。把它作为答案贴出来:

您可以使用TestInfo对象访问测试方法的名称,请参见如何打印"要执行的";@Test method' "方法在junit5 ?你有什么问题吗?看起来你已经知道名字了。要创建和使用WebDriver实例,您可以使用protected字段,它将为每个单元测试方法在@BeforeEach方法中设置WebDriver实例。

最新更新