当前位置: 首页 > 知识库问答 >
问题:

重写TestNG的getTestName方法

白君之
2023-03-14

我使用dataProvider执行TestNG测试。因此,我通过@BeforeMethod设置testName,并重写getTestName()。

到目前为止,这是有效的,但TestNG似乎在开始之前就调用了测试的getTestName。当配置期间抛出异常时会发生这种情况,因此@BeforeMethod不会执行,因此我的测试名称为空。

无论如何,是否有调用原始方法的方法,如果我没有覆盖它,就会调用这个方法:D因为我实现了一个接口,并且没有从另一个类扩展,我不能使用super。getTestName()。

有什么办法可以解决这个问题吗?

@Test(groups = {TestGroups.READY}, description = "check help on each tab")
public class HelpTest extends TestControl implements ITest {

    // overriding to return my individual testname, but is null at the beginning
    @Override
    public String getTestName() {
        return TestControl.getCurrentTestName();
    }

    @DataProvider(name = "tabs")
    public Iterator<Object[]> tabs() {
        Set<Object[]> list = new LinkedHashSet<Object[]>();
        for (Tab tab : Tab.values()) {
            list.add(new Object[]{tab});
        }
        return list.iterator();
    }

    // before the test below starts, i set my individual testname
    @BeforeMethod
    public void setTestName(Method method, Object[] testData) {
        TestControl.setCurrentTestName(method.getName() + "_" + StringUtils.capitalize(testData[0].toString().toLowerCase()));
    }

    // executing the test with the given data provider
    @Test(dataProvider = "tabs")
    public void testHelpSites(Tab tab) throws Exception {
        TestActions.goTab(tab).callHelp(tab).checkHelp();
    }
}

共有2个答案

司徒云
2023-03-14

我可以使用ITestNGMethod testng类解决这个问题。

ITestNGMethod方法=结果。getMethod();//结果是ITestResult对象方法。getMethodName();//这将返回方法名称。

My complete method here:
    @Override
    public void onTestSuccess(ITestResult result) {
    ITestNGMethod method = result.getMethod();
    String message = "Test Execution is Successful:"+method.getMethodName();
    }

希望这有帮助

韦宣
2023-03-14

我想我弄明白了,我还通过AbstractWebDriverEventListenerITestListener使用TestReport,并在其onTestStart(ITestResult结果)上调用测试的名称,这是@BeforeMethod调用之前的调用源。

我通过检查结果来解决它。getName()为null,如果实现了ITest,则调用测试的getTestName(),如果为null,则使用结果中的原始名称。getMethod。getMethodName()。不漂亮,但很少见:D

 类似资料:
  • subA类是A类的子类。我试图重写一个方法,但不知怎的,它不允许我重写它。为什么会这样?是因为参数中的参数吗? 读取错误消息: 名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但两者都不重写另一个,其中E#1、E#2是类型变量: E#1扩展了subA类中声明的对象 E#2扩展了A类中声明的对象 超类A: 子类subA:

  • 问题内容: 我正在记录我已经开发的Java程序,并且想知道如果仅记录超类,是否将为继承的方法(被重写)生成JavaDoc? 如果我有一个用方法调用的类,而有一个用该方法重写的子类,那么如果Car类中没有放置Javadoc,Carss驱动方法中是否会包含Vehicles驱动方法的文档? 问题答案: [I]想知道如果我仅记录超类,是否将为继承的方法(被重写)生成JavaDoc? 是。如果在子类上没有j

  • 问题内容: 用Java如何实现方法重写?在C ++中,我们有vtable的概念。.这是如何在Java内部实现的? 问题答案: 为了回答这个问题,特别是在虚拟机中如何实现覆盖,在Java虚拟机编程(Google图书链接)中有一篇文章。 VM将在所引用的类中寻找适当的方法定义,然后逐步处理继承栈。显然,在某些阶段将应用各种优化。 有关相关字节码指令的说明,请参见此处: invokevirtual会查看

  • 在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为 方法重写(override),又称为 方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。 子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。 在重写方法时,需要遵循

  • 我有一个库类中的案例,我想覆盖方法以减少我需要传递的参数数量以对其进行模式匹配。我这样做: 但我希望它只返回。这有什么问题?

  • 这里我有两个类DemoParent和DemoChild,它们扩展了DemoParent,在DemoParent中我有通用方法m1(int I),但在DemoChild中我有varargs方法m1(int…I)。当我创建子类的对象并调用m1方法时,它会给我父类方法输出。请参见下面的输出。o/p-母公司 有人能解释为什么父类方法总是从子类引用调用,即使子类具有相同的方法? 但是如果我们反向代码,即父类