【问题标题】:What would be a good code structure for test fields?测试字段的良好代码结构是什么?
【发布时间】:2012-10-30 05:41:21
【问题描述】:

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

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

还有什么更好的结构?

【问题讨论】:

  • 为什么不创建一个从给定输入文件中读取字符串的方法呢?这样,您所要做的就是为测试提供一个要读取的文件,并且它会读取许多字符串输入到文件中。使用一些字符/字符串来指示字符串何时开始/结束,以便代码能够将它们分开
  • @TheCapn 好主意,谢谢!我会考虑这个选项。

标签: java arrays field


【解决方案1】:

你考虑过列表吗?如果您不关心字符串的顺序,这是一个很好的解决方案。它很容易实现,您可以根据需要添加或删除任意数量的元素。 Wikipedia - List

【讨论】:

    【解决方案2】:

    如果你想循环使用它们,我会认为它们在某种程度上是同质的。此外,变量名称(s1s2s3)就其本身而言毫无意义。所以去数组(或使用Arrays.asList() idiom)。

    如果每个字符串都有不同的含义并且单独使用,那么肯定有单独的变量。如果您想要两全其美(单独的变量和易于维护的列表,请考虑一下):

    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 关键字。

    【讨论】:

    • 很棒的选择和解释。谢谢你。 str 函数的建议解决方案很好。
    【解决方案3】:

    另一种方法是使用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());
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多