Какое надлежащее обходное решение для @BeforeAll в Котлине

В настоящее время API JUNIT5 разрешает только @BeforeAll только для статического метода

так что если делать так, и это не скомпилируется:

@BeforeAll fun setup() { MockitoAnnotations.initMocks(this) mvc = MockMvcBuilders.standaloneSetup(controller).build() } 

поэтому для того, чтобы иметь статический метод в Котлине, я должен добавить в объект-компаньон следующим образом:

 companion object { @JvmStatic @BeforeAll fun setup() { MockitoAnnotations.initMocks(this) mvc = MockMvcBuilders.standaloneSetup(smsController).build() } } 

Это будет скомпилировано, но у меня нет доступа к переменным из родительского класса. Итак, каков был бы идиоматический способ вызвать @BeforeAll JUnit5 с Kotlin?

Как указано в документации @BeforeAll :

Обозначает, что аннотированный метод должен быть выполнен перед всеми методами @Test в текущем классе; аналогично JUnit 4's @BeforeClass. Такие методы должны быть статическими и наследоваться.

Вышеизложенное верно как для Kotlin, так и для Java. Имейте в виду, что по умолчанию Junit создаст отдельный экземпляр тестового класса для каждого тестового примера. Имеет смысл, что @BeforeAll будет работать только со статическими методами, поскольку он должен быть вызван перед любым кодом текущего тестового примера. Статический метод не имеет доступа к членам экземпляра, потому что он может быть вызван без экземпляра.

Как указано в весенней документации:

С другой стороны, «standaloneSetup» немного ближе к единичному тесту.

Пример показывает, что вам следует просто использовать экземпляры экземпляра:

 class StandaloneTest { val smsController = ... // create instance of controller val MockMvcBuilders.standaloneSetup(smcController).build() } 

Полезность @BeforeAll ограничена и, как правило, следует избегать, поскольку она потенциально поощряет зависимости от времени выполнения между тестовыми примерами.

Intereting Posts
Открытые поля для совместимости с Java Заменить setter для переменной, определенной в конструкторе по умолчанию Jacoco сообщает об 0 охвате классов Kotlin модульными тестами, в Android-проекте Приращения вызывают сбои сборки Получение данных JSON из тела POST в Spark + Kotlin Как сделать сумму элементов для нескольких списков в kotlin Ошибка сборки: ошибка: выполнение не выполнено для задачи: app: compileLightningLiteDebugKotlin '. > Ошибка компиляции Преобразует ли файл Kotlin в java, добавив к нему java-код и вернувшись обратно в Kotlin так же, как добавление кода непосредственно в файл Kotlin? Как связать представление в RecyclerView.ViewHolder с kotlin Что такое типализм в Котлине и как он используется в этой реализации? Как узнать, пуст ли массив? Почему ReversedLinesFileReader так медленно? Есть ли способ построить HashSet с функцией инициализации в Котлин? Возврат из функции в Kotlin как однострочный, когда объект равен нулю Android gradle build неожиданно отключается в ': app: mergeDebugResources' без сообщений об ошибках