什么是测试领域的良好代码结构?

时间:2012-11-09 20:59:26

标签: java arrays field

我有一个包含测试内容的字段的测试类。它看起来像:

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个长串。

什么是更好的结构?

3 个答案:

答案 0 :(得分:3)

如果你想在循环中使用它们,它会让我觉得它们在某种程度上是同质的。此外,变量名称(s1s2s3)毫无意义。所以去数组(或使用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关键字。

答案 1 :(得分: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;
    }
}

然后,您可以单独或作为列表访问实例,例如: -

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());
    }
}

使用这种方法,您无需担心在添加或删除新值时修改数组。

答案 2 :(得分:0)

你想过列表吗?如果您不关心琴弦的顺序,那么这是一个很好的解决方案。它实现起来非常简单,您可以根据需要添加或删除任意数量的元素。 Wikipedia - List