dependsOnMethods @AfterTest没有找到测试方法

时间:2016-08-04 04:56:09

标签: java testng

我正在尝试以下代码:

public class ShashiTest {
    @Test
    public void test1(){
        System.out.println("1===========");
    }

    @Test(dependsOnMethods="test1")
    public void test2(){
        System.out.println("2===========");
    }

    @Test(dependsOnMethods="test2")
    public void test3(){
        System.out.println("3===========");
    }

    @AfterMethod(dependsOnMethods={"test2","test3"})
    public void test4(){
        System.out.println("4===========");
    }
}

我期待输出为:

1===========
2===========
4===========
3===========
4===========

但我发现异常,因为未找到测试方法:

com.ShashiTest.test4() is depending on method public void com.ShashiTest.test2(), which is not annotated with @Test or not included.
    at org.testng.internal.MethodHelper.findDependedUponMethods(MethodHelper.java:111)

我在哪里弄错了?我如何实现目标?

2 个答案:

答案 0 :(得分:2)

@AfterMethod声明此方法在使用@Test注释的每个方法之后运行。现在你与test4()之后和test2()之前调用test4()有冲突,同时还要求它在test2()之后运行。有关更深入的讨论,请参阅this

编辑:我应该让呼叫顺序更清晰。

test1()->test4()
test2()->test4()
test3()->test4()

如您所见,要求test4()在test2()和test3()之后运行与@AfterMethod注释冲突,要求在每个方法之后调用它。

答案 1 :(得分:1)

dependsOnMethod不是那样工作,只是用于在它们之间订购方法。 javadoc足够明确IMO:

  

此方法所依赖的方法列表。无法保证所依赖的方法的运行顺序,但保证在运行包含此批注的测试方法之前运行所有这些方法。此外,如果这些方法中的任何一个不是SUCCESS,则不会运行此测试方法,并将其标记为SKIP。如果其中一些方法已经过载,则将运行所有重载版本。

但不应该发生异常,所以我为它打开了an issue

关于仅针对特定方法运行@AfterMethod的需求(看起来很奇怪,但为什么不运行),您可以执行以下操作:

public class ShashiTest {
    @Test
    public void test1(){
        System.out.println("1===========");
    }

    @Test(dependsOnMethods="test1")
    public void test2(){
        System.out.println("2===========");
    }

    @Test(dependsOnMethods="test2")
    public void test3(){
        System.out.println("3===========");
    }

    @AfterMethod
    public void test4(Method m){
        switch(m.getName()) {
            case "test2":
            case "test3": 
                System.out.println("4===========");    
        }
    }
}

应该按预期工作。

相关问题