【问题标题】:Adding field to enum将字段添加到枚举
【发布时间】:2012-11-29 21:13:53
【问题描述】:

我必须为一个项目编写验收测试。在这个项目中有一个公共的最终枚举,其中包含另一个带有方法的枚举。我应该在运行时添加新值,但我不知道如何实现这个结果。我使用的语言是 Java。

你能帮帮我吗?

【问题讨论】:

  • 为什么需要向枚举添加值才能编写验收测试?
  • 因为我必须从 FIT 表中加载新值,而这些值在系统中以枚举类型表示
  • 枚举的重点是提供一组静态约束的值 - 如果您的要求是可以动态读取的开放式值集,请不要使用枚举。您唯一的选择是更改代码以返回从表中的数据构造的类的实例,或者将新字段静态添加到枚举。
  • 我无法选择对象的类型。我正在测试一个枚举对象。
  • java 类型系统告诉您代码不符合您的要求。如果枚举未表示必须返回的值的范围,则代码未通过验收测试,因为您的某些场景甚至无法表示。

标签: java testing automated-tests integration-testing


【解决方案1】:

您不能在 java 中的 Enum 中动态创建条目。我建议使用地图来做这样的事情,但它不会是一个枚举。

【讨论】:

  • 我无法更改代码!我必须返回一个枚举类型
  • 听起来你在这里做的是 XY 反模式。你真正想达到什么目标?
  • 我正在尝试这样做:javaspecialists.eu/archive/Issue161.html 但更笼统。我没有任何开关。
【解决方案2】:

让您的枚举实现一个接口,该接口声明 getter 方法以访问您要扩展的枚举上的字段。在客户端代码中,更改将枚举带到接口的所有方法。通过这种设计,您可以轻松地为您的测试添加新值。

【讨论】:

    【解决方案3】:

    为什么不创建一个列表(例如 LinkedList 等)并使用枚举的 values() 方法 将初始值(枚举的值)放入列表中。然后您可以在运行时将新值添加到列表中,例如:

    要遍历枚举的值,只需使用 values();示例假定正确声明 public Enum Month {...}:

    1. for (Month month : Month.values()) {  
    2.  //do something  
    3. }  
    

    这是一个 URL,其中包含有关将 values() 与枚举一起使用的信息:

    http://www.coderanch.com/t/410234/java/java/Iteration-Enum
    

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多