Índice de temario
Día | Tema a tratar |
---|---|
1 | Definiendo objetivos |
2 | Proyecto inicial |
3 | Endpoint básico |
4 | Entidades y persistencia |
5 | Transaccionalidad |
6 | Migraciones |
7 | Manejo de excepciones |
Día 3. Endpoint básico
Bueno. Lo primero que tenemos que hacer es buscar la manera de hace un test de integración que nos ayude a nuestro cometido.
En este caso, queremos que un endpoint deje hacer un llamada POST para crear un usuario. Pero para empezar, sólo haremos que nos devuelva la información que le enviamos.
Siguiendo la estructura de DDD Bounded Context.Module.Layer. Creamos el package users.user.ui en la carpeta de test e intentamos hacer que funcione…
Para ello necesitaremos declarar que es un test de Springboot con la anotación @SpringBootTest (equivale a WebTestCase de symfony) y cargar el MockMvc con @AutoConfigureMockMvc (equivale al cliente de test de symfony)
package com.example.users.user.ui
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import kotlin.test.Test
@SpringBootTest
@AutoConfigureMockMvc
internal class SignUpUserTest {
@Autowired
private lateinit var mockMvc: MockMvc
@Test
fun `Should create a User` () {
mockMvc.perform(
post("/user/signup"))
.andExpect(status().isCreated)
}
}
Al test le faltan cosas… pero vamos por partes…. Ahora tendremos que hacer un endpoint que nos devuelva un estado “created”.
package com.example.users.user.ui
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RestController
import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType
@RestController
class SignUpUser {
@PostMapping("/user/signup")
fun execute(): ResponseEntity<JvmType.Object>
{
return ResponseEntity(HttpStatus.CREATED)
}
}
A tener en cuenta. SpringBoot maneja las dependencias a través de anotaciones y detecta servicios buscando en los paquetes hijos que haya debajo del fichero Application. Eso quiere decir que si ponemos las anotaciones y los packages en el sitio correcto, SpringBoot hará el resto con el @Autowired
Si le damos al play en nuestro IDE para que ejecute el test, tendremos luz verde para seguir nuestro camino, que es que guarde realmente algo en base de datos. Lo veremos en el siguiente post
Links y recursos
https://spring.io/guides/gs/testing-web/
Share this post
Twitter
Facebook
Reddit
LinkedIn
Email