我们应该在TestNG中的@BeforeClass或@BeforeTest注释中使用assert,这样做是否是一个好习惯?

时间:2018-06-17 07:49:23

标签: selenium testng

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

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

2 个答案:

答案 0 :(得分:0)

更多的是关于意见。

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

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

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

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

@BeforeClass setupClass ,您可能希望在其中声明先决条件,例如驱动程序初始化和所有。

所以提出问题,我们应该断言良好做法

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

答案 1 :(得分:0)

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

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

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