2017-02-23 26 views
0

私は、ユーザ名、電子メール、パスワードを尋ねるメソッドaddNewUserを持っています。それらは対応する列のExcelシートに保存されます。以下のコードを参照してください。今JAVA:メソッドに新しいパラメータを追加する

public class ExcelConfig { 



public FileInputStream fis; 
public FileOutputStream fos; 
public XSSFWorkbook wb; 
public XSSFSheet sh; 
public XSSFRow row; 
public XSSFCell cell; 

int lastRow = 0; 

ConfigReader cr = new ConfigReader(); 

public ExcelConfig(){ 

     try { 
     fis = new FileInputStream(cr.getExcelPath()); 
     wb = new XSSFWorkbook(fis); 
     } 
     catch (Exception e) { 
     System.out.println("Error at ExcelConfig " + e.getMessage()); 
     } 


} 


public void addNewUser(String un, String em, String pw){ 


     cell = row.createCell(0); 
     cell.setCellValue(un); 

     cell = row.createCell(1); 
     cell.setCellValue(em); 

     cell = row.createCell(2); 
     cell.setCellValue(pw); 


} 

}

を、他のクラスでは、私はaddNewuserメソッドを呼び出しました。以下のコードを参照してください

public class NextStepTest { 

WebDriver driver; 

ConfigReader cf; 
ExcelConfig ec; 
UserDetails ud; 

LandingPage lp; 
RegisterPage rp; 

String username; 
String email; 
String password; 




@BeforeTest 
public void setUp(){ 
    cf = new ConfigReader(); 
    ec = new ExcelConfig(); 
    ud = new UserDetails(); 


    driver = cf.getChromeDriver(); 
    driver.get(cf.getAppUrl()); 


} 

@Test 
public void register(){ 

    username = cf.getUsernameFromProperty(); 
    email = cf.getEmailFromProperty(); 
    password = ud.getPassword(); 

    try{ 

     lp = new LandingPage(driver); 
     lp = PageFactory.initElements(driver, LandingPage.class); 

     lp.locateRegisterLink(); 
     lp.clickRegisterLink(); 

     rp = new RegisterPage(driver); 
     rp = PageFactory.initElements(driver, RegisterPage.class); 


     rp.locateUsernameField(); 
     rp.registerAccount(username, email, password); 


     ec.getSheet(0); 
     ec.getNextRow(); 
     ec.addNewUser(username, email, password); // here I call addNewUser method that now has username, email and password values 
     ec.closeFile(); 

     rp.logout(); 
     lp.locateLoginLink(); 



    } 
    catch(Exception e){ 
     System.out.println("Error under NextStepTest.java => " + e.getMessage()); 

    } 



} 

ここで、addNewUserメソッドのパラメータを動的にすることは可能でしょうか?私はこのシナリオがプロジェクトに依存していることを知っています。一部のプロジェクトでは、このケースではユーザー名、電子メール、パスワードのみをExcelに追加する必要があります。将来の他のプロジェクトでアカウントタイプを追加する必要がある場合はどうなりますか?したがって、パラメータは4になります。その他のプロジェクトでは、電子メールとパスワードが必要になります。毎回addNewUserメソッドのパラメータを更新する必要がありますか?私はまだこの言語のスターターです。どんな助けもします。みんな、ありがとう!

+0

メソッドにvararg:String ... argsを受け入れるようにしてください。そして、少しJavaを学んでください。 –

+0

@EgorZhukビットでは十分ではありません。:D – nobalG

+0

あなたの 'addNewUser'は何らかの種類の' NewUserParameters'オブジェクトを受け入れるべきでしょう。指定されたコンテキストで必要なパラメータを指定してこのようなオブジェクトを作成し、それをメソッドに渡すことができます。関連項目[builder pattern](https://en.wikipedia.org/wiki/Builder_pattern) – khelwood

答えて

0

たとえば、作成されたXSSFRow行を返すcreateUserメソッドを持つインターフェイスAddNewUserを作成できます。

次に、そのインターフェースの実装を作成します。 AddUserWithEmailはコンストラクタで特定の値を取得し、createUserメソッドでユーザーと電子メールを行に追加します。

テーブルに異なる値を必要とする別の顧客がいる場合は、AddNewUserインターフェイスの新しいバリアントを作成して代わりに使用するだけです。その他、今後のプロジェクトであれば、それは アカウントの種類を追加する必要がありますどのような

0

?それらは...すべての文字列ですので、あなたはフォアハンド何で知っておく必要があります。

は、将来的には、あなたが意識する必要が唯一のものである方法

public void addNewUser(String un, String em, String pw){ 

} 

//only username 
public void addNewUser(String un){ 

} 

//with all the info + token 
public void addNewUser(String un, String em, String pw, String token){ 

} 

をオーバーロードする必要があります。文字列はどのパラメータに...

0

はい可能です。

foo("name"); 
foo("name", "account"); 
foo("name", "account", "age"); 

などを...

そしてusingsこのように、この引数:

public void foo(String... strings) { 
     if (0 < strings.length()) { 
      String name = strings[0]; 
     } 
     if (1 < strings.length()) { 
      String account = strings[1]; 
     } 
     if (2 < strings.length()) { 
      String account = strings[2]; 
     } 
     // etc 
    } 
を、これはあなたが呼び出すことができる機能を持つので、

public void foo(String... strings){ 
    // method body 
} 

:THI変数の引数パラメータを使用することにより

これが役立つことを願っています。

1

mapをパラメータとして使用できます。これはパラメータを動的に渡すのに役立ちます。

public void addNewUser(Map<String, Object> mapInput){ 
    Iterator entries = mapInput.entrySet().iterator(); 
    int i=0; 
    while (entries.hasNext()) { 
     Entry thisEntry = (Entry) entries.next(); 
     String value = (String)thisEntry.getValue(); 
     cell = row.createCell(i); 
     cell.setCellValue(value); 
     i++; 
    } 
} 
関連する問題