Java @测试注释和继承

Java @测试注释和继承,java,unit-testing,testng,Java,Unit Testing,Testng,我有两节课 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"); } } publ

我有两节课

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的方法1中
在ClassA的方法2中
在ClassB的方法3中
在ClassA的方法1中
在ClassA的方法2中

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

预期输出:
在ClassA的方法1中
在ClassA的方法2中

在ClassB的方法3中,这是预期的行为,因为
ClassB
继承了
method1
method2
来自
ClassA

要获得所需的行为,应仅执行
ClassB
或使
ClassB
不作为
ClassA
的子级

可能的解决办法:

<test name="group-test" preserve-order="true" >
     <classes>
        <class name="com.ClassB">
            <methods>
                <include name="method3"/>
            </methods>
            </class>    
    </classes>
</test>
维护您在问题中提供的相同XML


希望这有帮助

这是预期的行为,因为
ClassB
继承了
method1
method2
来自
ClassA

要获得所需的行为,应仅执行
ClassB
或使
ClassB
不作为
ClassA
的子级

可能的解决办法:

<test name="group-test" preserve-order="true" >
     <classes>
        <class name="com.ClassB">
            <methods>
                <include name="method3"/>
            </methods>
            </class>    
    </classes>
</test>
维护您在问题中提供的相同XML


希望这有帮助

你的问题是什么?为什么
method1()
method2()
method3()
之后再次执行?如果我写
,那么
method1()
method2()
仍将执行为什么不只执行类B?你的问题是什么?为什么
method1()
method2()
method3()
之后再次执行?如果我写
那么
method1()
method2()
仍将执行为什么不只执行类B?谢谢@idiazt,我明白了你的意思。但在一个场景中,我必须从类B调用method2(),而不是从类A调用method2()
,但testng完全忽略了它。我已经提到了@Test in class level也包括@idiazt,我明白了你的意思。但在一个场景中,我必须调用method2()来自ClassB不是来自ClassA
,但是testng完全忽略了它。我在类级别也提到了@Test