JUnit позволяет предоставлять правила через поле тестового класса или метод getter.
То, что вы отметили в Kotlin, является свойством , хотя JUnit не распознает.
Вот возможные способы задания правила JUnit в Kotlin:
Из M13 аннотация процессор поддерживает цели аннотации . Однако, когда вы пишете
@Rule
public val mActivityRule: ActivityTestRule = ActivityTestRule(javaClass())
, аннотация будет использовать цель property
по умолчанию (не отображается в Java).
Однако вы можете аннотировать свойство getter, которое также public и, таким образом, удовлетворяет требованиям JUnit для правила getter:
@get:Rule
public val mActivityRule: ActivityTestRule = ActivityTestRule(javaClass())
В качестве альтернативы вы можете определить правило с помощью функции вместо свойства (достижение вручную того же результата, что и для @get:Rule
).
Kotlin также позволяет , поскольку бета-кандидат детерминистически компилирует свойства в поля на JVM, и в этом случае применяются аннотации и модификаторы к сгенерированному полю. Это делается с помощью аннотации свойства Kotlin @JvmField
, как , на которую отвечает @jkschneider .
Боковое примечание: обязательно префикс Rule
с символом @
, так как теперь поддерживается только поддерживаемый синтаксис аннотаций и избегать @publicField
, так как он скоро будет сброшен .