Kotlin – lateinit TestRestTemplate не инициализирует интеграционные тесты

У меня есть приложение с пружинным загрузочным приложением, использующее котлин – в целом все идет хорошо. (весна 1.5.6.RELEASE, kotlin 1.1.4-3)

Во всяком случае, я добавлял свой первый контрольный тест после рассмотрения некоторого примера кода, и я столкнулся с этой досадной ошибкой:

kotlin.UninitializedPropertyAccessException: lateinit property restTemplate не был инициализирован

kotlin.UninitializedPropertyAccessException: свойство lateinit testRestTemplate не было инициализировано

at com.thingy.controllers.ProductSetControllerTest.getTestRestTemplate(ProductSetControllerTest.kt:16) at com.thingy.controllers.ProductSetControllerTest.testGet(ProductSetControllerTest.kt:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) at org.testng.TestRunner.privateRun(TestRunner.java:767) at org.testng.TestRunner.run(TestRunner.java:617) at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) at org.testng.SuiteRunner.run(SuiteRunner.java:240) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123) 

Вот тестовый класс

 import org.junit.runner.RunWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.web.client.TestRestTemplate import org.springframework.test.context.junit4.SpringRunner import org.testng.Assert import org.testng.annotations.Test @RunWith(SpringRunner::class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class ProductSetControllerTest { @Autowired lateinit var restTemplate: TestRestTemplate @Test fun testGet() { val forObject = restTemplate.getForObject("/", String::class.java) Assert.assertEquals(forObject, "gettest") } } 

Некоторые дополнительные вещи, которые я пробовал: – гарантировал, что я не использую устаревший TestRestTemplate – пытался использовать инъекцию setter вместо инъекции в поле, но был пустой тратой времени. – отключить плагины компилятора kotlin

Spring Boot не автоматически создает экземпляр TestRestTemplate bean (duh!).

Вам нужно определить его самостоятельно, и тогда вы сможете его использовать.

 @Bean open fun restTemplate(): TestRestTemplate { return TestRestTemplate() } 
Intereting Posts
Kotlin и Java в одном проекте с использованием Eclipse IDE kotlin alias собственность делегирование исключает исключение Мое собственное решение для отсутствия пробных ресурсов Котлина Добавление Kotlin к существующим Java-проектам нарушает ошибки в сообщениях об ошибках Android Studio EventBus с Kotlin не работает Котировка класса данных Котлина с измененным значением var Как создать экземпляр Singleton только один раз в моем приложении и его библиотеках? Классы Котлина, содержащие андроид-расширения, не построенные на последовательных строках Ошибка ввода типа. Ожидаемое несоответствие типа: требуется Строка найденная пара <String, String> в Котлине и Анко JsonArray в класс данных Kotlin с использованием Retrofit (ожидается BEGIN_OBJECT, но BEGIN_ARRAY) О Котлине и функциях Стили вложенного объекта Realm Android Kotlin – Как настроить методы настройки Java-конструктора Rxjava модифицирует parse api error для пользователя Почему getMessage () является нерешенной ссылкой в ​​Kotlin с классом Exception?