Kotlin – lateinit TestRestTemplate no se inicializa para las testings de integración
Tengo una aplicación de arranque de spring en desarrollo usando kotlin: las cosas en general van bien. (spring 1.5.6.RELEASE, kotlin 1.1.4-3)
De todos modos, estaba agregando mi primera testing de controller después de revisar algún código de ejemplo, y estoy corriendo en este molesto error:
- Spring & kotlin: ¿Cuál es la diferencia entre el constructor y la inyección tardía?
- Las testings de Kotlin fallan desde la línea de command con ClassNotFoundException pero funcionan desde IntelliJ
- Loop JPA array sin activar Lob fetch
- Api de reposo de arranque de spring: cómo admitir tanto json como request de urlencoded?
- Almacenar datos en BEAN (Spring Boot REST)
kotlin.UninitializedPropertyAccessException: la propiedad lateinit restTemplate no se ha inicializado
kotlin.UninitializedPropertyAccessException: lateinit property testRestTemplate no se ha inicializado
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)
Aquí está la class de testing
import org.junit.runner.RunWith import org.springframework.beans.factory.annotation.Autowinetworking 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 { @Autowinetworking lateinit var restTemplate: TestRestTemplate @Test fun testGet() { val forObject = restTemplate.getForObject("/", String::class.java) Assert.assertEquals(forObject, "gettest") } }
Algunas cosas adicionales que he intentado: – me aseguré de que no estoy usando TestRestTemplate en desuso – intenté usar la inyección de setter en lugar de la inyección de campo, pero era una pérdida de time. – Complementos del comstackdor de kotlin deshabilitados
- Crear map de lists de Spring config en Kotlin
- Kotlin y Spring Boot @ConfigurationProperties
- El comstackdor de Kotlin se queja de usar una expresión SPeL en una definición de propiedad. ¿POR QUÉ?
- java.lang.NoSuchMethodException: com ... Employee. <init> ()
- BeanDefinitionParsingException cuando se intenta usar JPA con Kotlin y Spring boot
- ¿Es posible ejecutar AsyncWebRequest a través de una llamada del browser?
- Spring no puede manejar el método que devuelve la class Kotlin interna genérica
- UnsatisfiedDependencyException para la aplicación Spring Boot 2.0.0.M2 utilizando Kotlin
Spring Boot no TestRestTemplate
automáticamente una instancia de TestRestTemplate
Bean (duh!).
Debe definirlo usted mismo y luego podrá usarlo.
@Bean open fun restTemplate(): TestRestTemplate { return TestRestTemplate() }