【问题标题】:How to execute @BeforeMethod of another class in case of multiple testng classes在多个testng类的情况下如何执行另一个类的@BeforeMethod
【发布时间】:2016-01-08 17:27:04
【问题描述】:

问题陈述:我有多个具有@BeforeMethod 和@Test 方法的testng 类,并且一些测试是通过另一种测试方法调用的。在这种情况下,BeforeMethod 方法不会被执行。

例如

public class A {

    @BeforeMethod
    public void preCheck(){
         System.out.println("Pre-Check A");
    }

    @Test
    public void check(){
         System.out.println("Check A");
         B objB = new B();
         objB.check();
    }
}

public class B {

    @BeforeMethod
    public void preCheck(){
        System.out.println("Pre-Check B");
    }

    @Test
    public void check(){
        System.out.println("Check B");
    }
}

当我将 A 类作为 Testng 类执行时,我得到以下输出

Pre-Check A
Check A
Check B

而期望的输出是

Pre-Check A
Check A
Pre-Check B
Check B

我怎样才能达到同样的效果?

【问题讨论】:

  • 你应该创建一个对象层次结构。
  • 尝试使用testng.xml文件调用

标签: java annotations testng


【解决方案1】:

您遇到此问题的原因是因为单元测试框架不应该以这种方式工作。当涉及到单元测试时,这并不是一个真正的最佳实践,因为您一次测试多个单元。您需要隔离您尝试测试的单元。在该测试中,在使用 @BeforeMethod 注释的方法中设置所有前置条件。

如果您必须将它们放在一个测试中,因为它们是如此紧密耦合,那么请创建一个单元测试来实例化两者,并在一个测试中以这种方式测试它们。更好的方法是在 A 测试中模拟 B,以便您可以指定 B 将产生的输出并在这种情况下测试 A 的功能。

如果你给出一个更具体的例子来说明你正在尝试测试什么,那么我可以给你一些关于如何测试它的代码。

【讨论】:

  • 嗨@Josh,感谢您的意见。我正在为可能处理不同组件的端到端集成用例创建一个测试框架,例如web-service api 测试、web-driver UI 测试、对数据库的 sql 调用等,这可能是也可能不是单个测试。我的计划是为类似的组件构建专用库,并使它们具有通用性和可互操作性,我组织中的其他团队也可以使用它们。
  • 例如,我在 UI 上执行一些操作并使用基于休息的 Web 服务调用来验证它们的用例。所以我的测试脚本将调用类中的方法,例如 -> MasterTests.java -> UITests.java -> WebServiceTests.java。现在我需要这些类中的每一个的 beforemethods 以便它满足广泛的用例而不依赖于特定的入口点,因为例如某些其他团队可能只需要调用 WebServiceTests.java &因此 beforemethod 应该预先配置相应地进行测试。如果你能提出一些更好的方法来实现这一点!!!提前致谢
猜你喜欢
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 2018-12-19
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多