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

依赖于@AfterTest的方法未找到测试方法

东门仲卿
2023-03-14

我正在尝试以下代码:

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)

我在哪里犯了错误?我如何才能实现我的目标?

共有3个答案

齐飞星
2023-03-14

回答有点晚,但我今天刚刚遇到了这个问题。错误:com.expedia.FlightBooking.tearDown()取决于方法public valcom.expedia.FlightBooking.flightBooking(),该方法未使用@Test注释或不包含。

解决方案:将dependsOnMethods更改为dependsOnGroups Ex:@AfterTest(dependsOnGroups={“flightBooking”})解决了我的问题。

潘自强
2023-03-14

dependsOnMethod不是这样工作的,只是用来在它们之间排序方法。javadoc足够清晰,IMO:

此方法所依赖的方法列表。无法保证所依赖的方法的运行顺序,但可以保证在运行包含此注释的测试方法之前,将运行所有这些方法。此外,如果这些方法中的任何一种都不成功,则此测试方法将不会运行,并将标记为跳过。如果其中一些方法已重载,则将运行所有重载版本。

但是这个例外不应该发生,所以我为它打开了一个问题。

关于您仅为特定方法运行@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===========");    
        }
    }
}

应按预期工作。

秦浩漫
2023-03-14

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

编辑:我可能应该让呼叫顺序更清楚。

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

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

 类似资料:
  • 本文向大家介绍特定测试方法的执行如何依赖于TestNG中的其他测试方法?,包括了特定测试方法的执行如何依赖于TestNG中的其他测试方法?的使用技巧和注意事项,需要的朋友参考一下 可以在dependsOnMethods helper属性的帮助下,使特定测试方法的执行依赖于另一个测试方法。 示例 在Java类文件中,只有在该方法成功运行后,才会执行verifyLoan()方法。但是方法独立运行,而无

  • 我正在使用TestNG和注释-“依赖方法” 代码示例: 现在,需要以编程方式获取触发其他测试方法(Test2)的测试方法(Test1)的名称。 ******************更新了上下文 我正在Maven项目中运行TestNg、java、extent reports 4.0.9、selenium测试。 CURRENT:测试[addAndPopulateTest],它使用TestNg-“依赖方

  • 我正在尝试使用https://github.com/bright/slf4android中的slf4android依赖项,但gradle同步有问题。 Build.Gardle(项目) Build.Gardle(应用程序)

  • 尝试部署 Web 应用程序时,由于日志记录错误(如下所示),它将失败: Java . lang . nosuchmethoderror:org . SLF 4j . SPI . locationawarelogger . log(Lorg/SLF 4j/Marker;ljava/lang/String;il Java/lang/String;ljava/lang/Throwable;) 我已经谷歌

  • 我正在尝试使用maven和java设计一个应用程序。它的一部分连接到MySQL数据库。为此,我使用了< code > class . forname(" com . MySQL . JDBC . driver ");。我还将< code>mysql-connector-java '依赖项添加到我的pom.xml中。但是,当我运行mvn test connection = driver manage