2015-01-19 6 views
10

Ich habe einen TestNG-Code, wo ich einen Test-Annotationsparameter mit der Bezeichnung timeOut = TESTNG_TEST_TIMEOUT übergebe.In Java, warum dieser Fehler: "Attributwert muss konstant sein"?

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

Und in meiner Klasse Testbase habe ich dieses Mitglied:

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

Wenn ich die obige Codezeile verwenden, erhalte ich einen in Eclipse Fehler ‚Attributwert konstant sein muss.‘

Aber, wenn ich einfach das Element definieren, wie so, es funktioniert:

public final static long TESTNG_TEST_TIMEOUT = 300000; 

die Verwendung von Timeunit ist keine Konstante?

+1

Beachten Sie jedoch, dass Sie * wahrscheinlich * einen statischen Init-Block verwenden können, um dieses Problem zu umgehen. –

+0

Ahh. Interessanter Gedanke. Vielen Dank. – djangofan

Antwort

19

Diese

public final static long TESTNG_TEST_TIMEOUT = 300000; 

ist ein constant variable, eine Art von constant expression.

Diese

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

nicht.

Annotation Mitglieder expect Konstante Ausdrücke (und ein paar andere Dinge wie enums und Class Literale).

+3

Danke für die Hyperlinks. Ich kann sehen, dass der Doc sagt, dass eine Konstante ein primitiver oder ein vordeklarierter String sein muss. Vielen Dank. – djangofan

+0

Ich würde auch hinzufügen, dass öffentliche endgültige statische lange TESTNG_TEST_TIMEOUT = 50; ist eine konstante Variable, aber public final static long TESTNG_TEST_TIMEOUT = 50 + 60; ist nicht. – javadev

+0

@java Eigentlich ist es. –