我目前使用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
实例。