【问题标题】:Should we use assert in @BeforeClass or @BeforeTest annotations in TestNG, is it a good practice to do that?我们应该在 @BeforeClass 中使用 assert 还是在 TestNG 中使用 @BeforeTest 注释,这样做是一个好习惯吗?
【发布时间】:2018-11-26 10:17:24
【问题描述】:

这是一个登录系统的示例代码

@BeforeClass
public void verifyLogin()
    {
    loginObject.enterUsername("admin");
    loginObject.enterPassword("!212313132");
    loginObject.clickOnsignIn();
    Assert.assertTrue(homeObject.isLoggedIn());
}

【问题讨论】:

    标签: selenium testng


    【解决方案1】:

    更多的是关于意见。

    您在@BeforeClass 中进行登录,必须通过Assert.assertTrue(homeObject.isLoggedIn()); 验证您的操作是否正确。

    因为如果登录失败,您可能不想继续测试。

    请注意,与@BeforeClass 相比,TestNG 中的@BeforeTest 单位更大。

    我个人在@BeforeMethod 中编写登录方法,然后是类中的所有@Test 方法。

    @BeforeClass 是一个setupClass,您可能希望在其中声明您的先决条件,例如驱动程序初始化等。

    所以来回答您的问题,我们应该在哪里断言以及什么是良好做法

    无论何时需要验证,我们都必须断言。就这么简单。

    【讨论】:

    • @DeepanshuRawat : 请让我们知道它对您有没有帮助?
    【解决方案2】:

    Selenium 的常见设计模式是Give-When-Then design

    看起来您描述的测试包含“给定用户 X 已登录”,因此包含“何时..”和“然后..”。因此,由于登录用户是您测试的前提条件,因此断言它很有意义。

    但是,这不是强制性的。如果在登录页面中找不到 WebElement,您可以使用“homeObject.isLoggedIn()”方法抛出 LoginException。通过这种方式,您将能够创建一个否定测试(例如错误的密码),该测试将使用完全相同的代码并期待 LoginException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多