【问题标题】:In Java why this error: 'attribute value must be constant'?在Java中为什么会出现这个错误:'属性值必须是常量'?
【发布时间】:2015-03-17 21:08:26
【问题描述】:

我有一些 TestNG 代码,我在其中传递了一个名为 timeOut = TESTNG_TEST_TIMEOUT 的测试注释参数。

@Test(description = "Tests something.", groups = { "regression" }, 
   timeOut = TESTNG_TEST_TIMEOUT, enabled = true)

在我的 TestBase 类中,我有这个成员:

public final static long TESTNG_TEST_TIMEOUT = TimeUnit.MINUTES.toMillis(5);

当我使用上面的代码行时,我在 Eclipse 中得到一个“属性值必须是常量”的错误。

但是,如果我像这样简单地定义成员,它就可以工作:

public final static long TESTNG_TEST_TIMEOUT = 300000;

TimeUnit的使用不是常数吗?

【问题讨论】:

  • @HotLicks 尝试使用静态初始化块,但不幸的是它对我不起作用

标签: java annotations testng constants


【解决方案1】:

这个

public final static long TESTNG_TEST_TIMEOUT = 300000;

constant variableconstant expression的类型。

这个

public final static long TESTNG_TEST_TIMEOUT = TimeUnit.MINUTES.toMillis(5);

不是。

注解成员 expect 常量表达式(以及其他一些东西,如枚举和 Class 文字)。

【讨论】:

  • 感谢您的超链接。我可以看到文档说常量必须是原始字符串或预先声明的字符串。谢谢。
  • 我还要添加 public final static long TESTNG_TEST_TIMEOUT = 50;是一个常量变量,但是 public final static long TESTNG_TEST_TIMEOUT = 50 + 60;不是。
  • @java 其实是这样的。
  • 仅供参考,public static final Long TESTING_TEST_TIMEOUT = 300000L; 也不是常量,请改用原语long
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多