2012-11-09 44 views
4

我有一個包含測試內容的測試類。它看起來像:什麼是測試字段的良好代碼結構?

class Test { 
    public static String s1 = " ... long string ... "; 
    public static String s2 = " ... long string ... "; 
    public static String s3 = " ... long string ... "; 
} 

現在,我想在一個循環中使用這些領域,所以我寫了一個額外的陣列

public static String[] a = {s1, s2, s3}; 

這種結構工作正常,但就是有點難看,因爲每次我添加或刪除一個字段,我也改變了數組。

唯一的解決辦法重新構造我沒有手動操縱陣列的代碼是,一次就全部寫在陣列中:

class Test { 
    public static String[] a = {" ... long string ... ", " ... long string ... ", 
           " ... long string ... "}; 
} 

正如你所看到的,這使得代碼不可讀,尤其是當我們必須處理> 10個長字符串時。

什麼可能是一個更好的結構?

+2

爲什麼不創建一個從給定的輸入文件讀取字符串的方法?這樣你所要做的就是給測試一個文件進行讀取和讀入,但是很多字符串都被輸入到文件中。使用一些字符/字符串來指示字符串開始/結束的時間,以便代碼能夠將它們分開 – Grambot

+0

@TheCapn好主意,謝謝!我會考慮這個選項。 –

回答

3

如果你想在循環中使用它們,它會讓我覺得它們在某種程度上是同質的。此外,變量名稱(s1,s2,s3)毫無意義。所以去陣列(或使用Arrays.asList()成語)。

如果每個字符串具有不同的含義並單獨使用,那麼肯定有單獨的變量。如果你想有兩全其美的(獨立變量,這是易維護的名單,認爲這是):

class Test { 
    public static final String s1 = str(" ... long string ... "); 
    public static final String s2 = str(" ... long string ... "); 
    public static final String s3 = str(" ... long string ... "); 

    public static final List<String> strings = new ArrayList<>(); 

    public static String str(String s) { 
     strings.add(s); 
     return s; 
    } 
} 

最後但並非最不重要的,記得final關鍵字。

+0

很棒的選擇和解釋。謝謝。具有'str'功能的建議解決方案很好。 –

0

你有沒有想過列表?如果你不關心你的字符串的順序,這是一個很好的解決方案。實現起來非常簡單,您可以根據需要添加或刪除任意數量的元素。 Wikipedia - List

1

另一種方法是使用例如enum

public enum Test 
{ 
    S1("... long string 1..."), 

    S2("... long string 2..."); 

    private String value; 

    Test(String value) 
    { 
     this.value = value; 
    } 

    public String getValue() 
    { 
     return value; 
    } 
} 

然後,您可以訪問實例單獨或作爲一個列表e.g.:-

public static void main(String[] args) 
{ 
    /* Single instance */ 
    String value1 = Test.S1.getValue(); 

    /* All instances */ 
    for (Test test : Test.values()) 
    { 
     System.out.println(test.getValue()); 
    } 
} 

通過這種方法,你不必擔心修改當您添加或刪除新的值的數組。

+0

好的方法,謝謝。 –

相關問題