0

我在一个 Java 类中有多个方法,其中每个方法都有 20 多个参数。我将在另一个类中为这个类创建一个对象并调用每个方法。通常我在 Selenium Java 中使用 POM(页面对象模型)。因此,在每个 Page 对象类中,每个方法中都有多个(20 多个)参数,我将在测试类中调用它们。

页面对象类:

public void enterShipInfo(String IMO,String Vstat,String Vcode,String Vname,
        String Vtype,String Officialno,String Buildyr,String Shipyard,String Hullno,String Layingdate,
        String Launcheddate,String Deliverdate,String Reportinclude,String Portregistry,String VFlag,
        String Vstatus,String Classification,String Classid,String Classnotation,String PI,String HM,
        String Regowner,String Shipmanager,String Comoperator,String Callsign,String SSR,String Factor,
        String ELOG,String Vcomments,String VsisIMO,String Chartertype,String Showonweb){ 

}

.... Other Methods with similar long list of parameters

然后在测试类中,我再次为这些创建参数:

public class VesTest {

@Test(dataProvider="Ves",priority=1)
public void createVesTest(String IMO,String Vstat,String Vcode,String Vname,
        String Vtype,String Officialno,String Buildyr,String Shipyard,String Hullno,String Layingdate,
        String Launcheddate,String Deliverdate,String Reportinclude,String Portregistry,String VFlag,
        String Vstatus,String Classification,String Classid,String Classnotation,String PI,String HM,
        String Regowner,String Shipmanager,String Comoperator,String Callsign,String SSR,String Factor,
        String ELOG,String Vcomments,String VsisIMO,String Chartertype,String Showonweb 

Mdr_Vessel obj_Mdr_Vessel = page(Mdr_Vessel.class);

  obj_Mdr_Vessel.clickSubmenu();
.....

}

有什么有效的方法可以减少在测试类中再次输入参数???我不想将方法分解为多个方法。所以请建议我一种以有效方式传递参数的方法

4

5 回答 5

2

您可以创建新对象来对参数进行分组,然后在方法签名中使用它们。例如 :

public class VParameter {
  String Vstat;
  String Vcode;
  String Vname;
  String Vtyp;
于 2015-11-12T08:12:51.507 回答
1

您应该阅读处理此类问题的Prameter 对象模式。简而言之,它建议您为该方法接受的所有参数创建一个包装器对象,并使用它来代替长长的参数列表。

public class YourClassName {
  private String IMO;
  private String Vstat;
  private String Vcode;
  // other parameters

  public YourClassName(String IMO, String Vstat, String Vcode, /* other params*/) {
    this.IMO = IMO;
    this.Vstat = Vstat;
    this.Vcode = Vcode;
    // assign other params
  }

  /getters
}
于 2015-11-12T08:17:42.507 回答
1

我不知道这是否算作“将方法分解为多个方法”,但您可以做的是将参数收集在单个对象中。然后例如

void method(Type1 parameter1, Type2 parameter2, Type3 parameter3) { ... }

变成:

public class Parameters {
    private Type1 parameter1;
    private Type2 parameter2;
    private Type3 parameter3;

    // getters and setters
}

void method(Parameters params) { ... }

这种模式通常以流畅的风格使用:

public class Parameters {
    private Type1 parameter1 = /* convenient default value */;
    private Type2 parameter2 = /* convenient default value */;
    private Type3 parameter3 = /* convenient default value */;

    public Parameters setParameter1(Type1 parameter1) {
        this.parameter1 = parameter1;
        return this;
    }

    // other setters in the same style and getters
}

然后你可以调用你的方法,如:

method(new Parameters().setParameter1(...).setParameter3(...));

(您只设置具有非默认值的参数)。

于 2015-11-12T08:13:31.113 回答
1

您可以创建一个类来重新组合所有参数吗?

于 2015-11-12T08:13:51.423 回答
0

您可以使用构建器工厂模式https://jlordiales.wordpress.com/2012/12/13/the-builder-pattern-in-practice/

于 2015-11-12T08:17:49.970 回答