方法中的参数数量

时间:2011-09-14 08:34:15

标签: java selenium refactoring

我有Selenium测试填写表格。我有一个方法,但这种方法在参数数量方面已经过度生长 -

 newMerchantPage.addEditMerchant(merchantDomain, merchantName,
            merchantCategory, true, merchantDescription, merchantNotes,
            merchantTags, true, true, false, false, merchantTitle,
            additionalDescription, merchantHeading, dummyCouponLink, true);

只有字符串和布尔值。 我正在考虑使用集合,然后在调用方法中迭代集合以进行更多处理。虽然还不确定这是否可行。有什么建议吗?

修改方法:

在实施了几个建议后,我的方法(不同方法)看起来像 -

ContactPage contactPage = new ContactPage(driver); 
setContactFormData(); 
contactPage.setName(name).setEmailAddress(emailAddress).setSubject(subject).setM‌ ​essage(message); 
contactPage.submitContactForm(contactPage); 

submitContactForm依次调用不同的实用程序方法。看起来有多糟糕?特别是最后一行(对象的方法调用和作为参数传递的同一对象)?

4 个答案:

答案 0 :(得分:5)

一种常见的方法是将参数包装在一个类中。然后,这个类可以提供返回this的set方法,以允许一个很好的链接。 (请参阅ProcessBuilder以获得一个好例子。)

示例:

MerchantData data = new MerchantData();   // initialize with sensible defaults

data.setDomain("example.com")
    .setName("Some Name")
    .setTags("tag1, tag2);

newMerchantPage.addEditMerchant(data);

答案 1 :(得分:2)

我假设您使用的是Selenium服务器(或RC)。

将数据包装到Merchant类中的建议都很好并且有意义,特别是从纯Java编码的角度来看。

但是,您在Selenium中关注的主要问题是您正在填写的表单,而不是商家域对象。

也许你可以将你的方法分解成更小的方法,比如 openMerchantForm(...) typeNameInMerchantForm(...) chooseMerchantCategory(...)

依此类推,具体取决于表单上设置的控件类型。这将反映您正在测试的行为,而不是直接设置域对象等。

希望有所帮助。

答案 2 :(得分:1)

也许 - 编写一个类Merchant,使用方法值创建一个实例并改为传递实例?

newMerchantPage(Merchant merchant);

优点:您可以将测试参数保存在文件中,并执行以下操作:

Merchant merchant = new Merchant();
merchant.populate(File testdata, int record);

答案 3 :(得分:0)

您是否考虑过创建一个类,如果您指定的参数属于同一个类,则将该对象作为参数传递。