我是否需要 TestNG 类中的构造函数来初始化辅助类对象和实例变量?

时间:2021-05-14 13:25:45

标签: testng

我正在从 TestNG 测试类调用某些辅助方法来调用 API 端点并检索响应。并验证响应对象。下面是我的 TestNG 测试类

之一的示例之一

在下面的类中,我正在初始化辅助对象和声明。这是一个好习惯吗?还是应该在构造函数或@BeforeClass 方法中初始化?

public class GetPaymentDetailsTests extends TestBase {
    String authToken = Partner.get(WithScope.CHECKOUT_USER_GROUP).getBasicToken();
    String partnerId = Partner.get((WithScope.CHECKOUT_USER_GROUP)).getPartnerId();
    String requestId = UUID.randomUUID().toString();
    MerchantAdapterHelper merchantAdapterHelper = new MerchantAdapterHelper();
    CustomerAdapterHelper customerAdapterHelper = new CustomerAdapterHelper();
    GopayAPIsHelper gopayAPIsHelper = new GopayAPIsHelper();
    public static final String redirectURL = "https://www.google.com";

    @Test(groups = {Categories.SMOKE_PAYMENT_EXPERIENCE, Categories.REGRESSION_PAYMENT_EXPERIENCE, Categories.CHECKOUT, Categories.GOPAY_APIS, Categories.PAYMENT_EXPERIENCE, Countries.ID})
    public void validateGetPaymentDetailsAPIByReferenceID(){
        Customer customer = customerHelper.getCustomer(CustomerGroup.P2M_ONLINE);

        CollectResponse collectPaymentResponse = merchantAdapterHelper.linkWalletAndInitiateCollectPaymentRequest(authToken, requestId, partnerId, OnlineMerchants.JD_ID.getMerchantID(), customer, 2, redirectURL, "en_EN" );
        String referenceID = merchantAdapterHelper.getParamValueFromnextActionURL(collectPaymentResponse.getData().getNext_action().getRedirect_to_url(), "reference");

        Assert.assertEquals(gopayAPIsHelper.getPaymentDetailsByReferenceID(referenceID).getHttpStatusCode(), HttpStatus.SC_OK, "Failed to get Get Payment Details response");
    }

    @Test(groups = {Categories.SMOKE_PAYMENT_EXPERIENCE, Categories.REGRESSION_PAYMENT_EXPERIENCE, Categories.CHECKOUT, Categories.GOPAY_APIS, Categories.PAYMENT_EXPERIENCE, Countries.ID})
    public void validateGetPaymentDetailsAPIResponseByStateID(){
        Customer customer = customerHelper.getCustomer(CustomerGroup.P2M_ONLINE);

        CollectResponse collectPaymentResponse = merchantAdapterHelper.linkWalletAndInitiateCollectPaymentRequest(authToken, requestId, partnerId, OnlineMerchants.TEST_USER_SOURABH.getMerchantID(), customer, 2, redirectURL, "en_EN" );
        String stateID = merchantAdapterHelper.getParamValueFromnextActionURL(collectPaymentResponse.getData().getNext_action().getRedirect_to_url(), "id");

        Assert.assertEquals(gopayAPIsHelper.getPaymentDetailsByStateID(stateID).getHttpStatusCode(), HttpStatus.SC_OK, "Failed to get Get Payment Details response");
    }
}    

1 个答案:

答案 0 :(得分:1)

如果辅助类的对象包含任何可能在任何方法调用期间修改的状态(类字段),这可能会影响下一个测试用例,则必须使用当前方法。

如果辅助方法仅用于调用方法,那么正如您所说,您可以在 @BeforeClass 方法中创建一个对象,这样您就不会为每个测试创建一个对象,这会不必要。

如果辅助类是由您定义的,并且它只包含调用 API 的方法,那么我建议您将所有这些方法定义为 static。这将允许您在不创建对象的情况下调用方法,这是理想情况下的帮助程序/实用程序类。

相关问题