2012-11-09 45 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

好的方法,谢谢。 –

相关问题