【问题标题】:@Test annotation and inheritence@Test 注解和继承
【发布时间】:2013-09-23 09:51:33
【问题描述】:

我有两个班级

public class ClassA
{
    @Test
    public void method1()
    {
      System.out.println("In method1 method of ClassA");
    }

    @Test 
    public void method2()
    {
       System.out.println("In method2 method of ClassA");
    } 
}


public class ClassB extends ClassA
{
    @Test
    public void method3()
    {
       System.out.println("In method3 method of ClassB");
    }
}

还有我的 testng.xml

<test name="group-test" preserve-order="true" >
     <classes>
        <class name="com.ClassA">
            <methods>
                <include name="method1"/>
                <include name="method2"/> 
            </methods>
        </class>
        <class name="com.ClassB">
            <methods>
                <include name="method3"/>
            </methods>
            </class>    
    </classes>
</test>

执行测试后,我的输出是
在ClassA的method1方法中
在ClassA的method2方法中
在ClassB的method3方法中
在 ClassA 的 method1 方法中
在ClassA的method2方法中

method1()method2()method3() 之后再次执行

预期输出:
在ClassA的method1方法中
在ClassA的method2方法中
在ClassB的method3方法中

【问题讨论】:

  • 你的问题是什么?
  • 为什么method1()method2()method3() 之后再次执行?
  • 如果我写&lt;class name="com.ClassB"&gt; &lt;methods&gt; &lt;include name="method3"/&gt; &lt;exclude name="method1"/&gt; &lt;exclude name="method2"/&gt; &lt;/methods&gt; &lt;/class&gt; 那么method1()method2() 仍然会执行
  • 你为什么不只执行B类?

标签: java unit-testing testng


【解决方案1】:

这是预期的行为,因为 ClassBClassA 继承 method1method2

要获得您想要的行为,您应该只执行 ClassB 或使 ClassB 不是 ClassA 的子级。

可能的解决方案:

<test name="group-test" preserve-order="true" >
     <classes>
        <class name="com.ClassB">
            <methods>
                <include name="method3"/>
            </methods>
            </class>    
    </classes>
</test>

或者:

public class ClassB
{
    @Test
    public void method3()
    {
       System.out.println("In method3 method of ClassB");
    }
}

维护您在问题中提供的相同 XML。

希望这会有所帮助!

【讨论】:

  • 谢谢@idiazt,我明白了你的意思..但在一种情况下,我必须从 ClassB 而不是 ClassA &lt;class name="com.statictest.ClassB"&gt; &lt;methods&gt; &lt;include name="method2"/&gt; &lt;/methods&gt; &lt;/class&gt; 调用 method2() 但 testng 完全忽略它。我在课堂上提到了 @Test水平也
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多