java - 如果 TestNG @BeforeClass 不是直接父类,则不会从父类(super class)运行

标签 java unit-testing testng

假设类继承就像 C -> B -> A,其中 A 是最顶层的父类(super class)。

  class A {
     @BeforeClass
     void setUp() {
       //some stuff
      }
    }

    class B extends A {

    }

    @Test
    class C extends B {
      //running this class DOES NOT invoke setUp() from A.
    }

我在A类中有@BeforeClass testng注释。我只用@Test注释C类。现在,我期望在运行类 C 时,它应该执行父类(super class) A 中带 @BeforeClass 注释的方法。但事实并非如此。

但是当我将 @BeforeClass 注释移动到 B 类时它就会运行。

有什么想法吗?

现在,解决方法是在 B 类中重新注释。

  class A {
     @BeforeClass
     void setUp() {
       //some stuff
      }
    }

    class B extends A {
      @BeforeClass
      void setUp() {
        super.setUp();
        //some stuff
      }
    }

    @Test
    class C extends B {
      //running this class invokes setUp() from only B.
    }

注意:如果一开始只有两级继承,则不存在此问题。

最佳答案

问题是 A 和 B 之间的方法名称相同。

当TestNG寻找配置方法时,它不会找到BsetUp()方法上的注释。 在每种情况下,您都必须在 B 中注释您的方法,因为 TestNG 无法找到没有注释的配置方法。

您可以保留您所使用的工作,也可以重命名一种配置方法。 setUp 不再是强制性的。

但我们可以假设这是一个可以通过 TestNG 解决的问题。因此,您应该在该项目上开票:http://github.com/cbeust/testng

关于java - 如果 TestNG @BeforeClass 不是直接父类,则不会从父类(super class)运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689384/

相关文章:

java - 如何通过在testNG中创建对象来调用测试方法

java - 检查对象是否为空的最快方法

java - 错误 : Could not find or load main class junit_runner.

java - 行程优化(最大化您的中途停留时间)

unit-testing - 我如何真正进行单元测试代码?

testing - 如何根据功能自动化 pdf 中的数据填充

java - 当 TestNG 监听器打开时,不会执行 Catch 语句

java - Android 与 JSON 的致命连接

angular - 如何模拟来自服务 Angular 7 的可观察值?

android - 如何编写android jUnit功能测试