[JAVA] Écrivez rapidement un test RestController avec Spring Boot + Spock

Tester le contenu

Validez le corps de la réponse au format JSON renvoyé par RestController.

environnement

Spring Boot:2.1.1 Spock:1.2 Groovy:2.5 OS:Windows10

Préparation

Ajoutez les bibliothèques requises pour les tests Spring Boot + Spock. En écrivant la dépendance sur spock-core, les bibliothèques autour de Groovy tomberont également. De plus, @Autowired etc. ne peut pas être utilisé dans Spock (Groovy) sans spock-spring, alors ajoutez-le si nécessaire.

pom.xml


<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>org.spockframework</groupId>
	<artifactId>spock-core</artifactId>
	<version>1.2-groovy-2.5</version>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>org.spockframework</groupId>
	<artifactId>spock-spring</artifactId>
	<version>1.2-groovy-2.5</version>
	<scope>test</scope>
</dependency>

URL de RestController et corps de réponse que vous souhaitez tester

L'URL et le corps de la réponse du RestController que vous souhaitez tester sont les suivants.

URL:
  http://localhost:8080/employees

Response:
  Status Code 200 OK
  [
    {
      "id": "00000001",
      "name": "Employé A",
      "department": {
        "id": "001",
        "name": "Département A"
      }
    },
    {
      "id": "00000002",
      "name": "Employé B",
      "department": {
        "id": "001",
        "name": "Département A"
      }
    }
  ]

Classe de contrôleur que vous souhaitez tester

Je vais omettre les étapes de EmployeeService # getEmployees, mais le contrôleur que vous souhaitez tester est le suivant.

EmployeeController.java


@RestController
public class EmployeeController {

	@Autowired
	private EmployeeService employeeService;

	@GetMapping(value = "/employees")
	public ResponseEntity<List<Employee>> getEmployees() {
		List<Employee> employeeList = employeeService.getEmployees();
		if (CollectionUtils.isEmpty(employeeList)) {
			return new ResponseEntity<>(null, HttpStatus.NO_CONTENT);	
		}
		return new ResponseEntity<List<Employee>>(employeeList, HttpStatus.OK);
	}
}

Classe d'essai

Validez à l'aide de Json Slurper et Json Builder de Groovy.

//ApplicationContext est chargé, mais l'environnement Web, etc. n'est pas fourni
@SpringBootTest(webEnvironment = WebEnvironment.NONE)

//Démarrez le serveur sur un port aléatoire
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)


//La valeur par défaut est la suivante, vous n'avez pas à l'écrire. Un environnement Web simulé est fourni sans démarrer le serveur
// @AutoConfigureMockMvc ou@Peut être utilisé en combinaison avec AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)


//L'environnement Web réel est fourni. Le serveur intégré démarre et le port configuré (application).Écouter sur (à partir des propriétés) ou sur le port par défaut 8080
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)

EmployeeControllerTest.groovy


@SpringBootTest
@AutoConfigureMockMvc
class EmployeeControllerTest extends Specification {

	@SpyBean
	private EmployeeService employeeService

	@Autowired
	MockMvc mockMvc

	@Unroll
	def "EmployeeController -Système normal-2 employés reviennent"() {

		given:
		def department = new Department("001", "Département A");
		def employeeList = new ArrayList<Employee>() { {
						this.add(new Employee("00000001", "Employé A", department));
						this.add(new Employee("00000002", "Employé B", department));
					}
				}
		def jsonBuilder = new JsonBuilder(employeeList)
		def jsonSlurper = new JsonSlurper()

		when:
		def actual = mockMvc.perform(MockMvcRequestBuilders.get("/employees")).andReturn().getResponse()

		then:
		actual.getStatus() == HttpStatus.OK.value
		jsonSlurper.parseText(actual.getContentAsString()) == jsonSlurper.parseText(jsonBuilder.toPrettyString())
	}

	@Unroll
	def "EmployeeController -Système normal-Rien ne revient"() {

		given:
		when(employeeService.getEmployees()).thenReturn(null)

		when:
		def actual = mockMvc.perform(MockMvcRequestBuilders.get("/employees")).andReturn().getResponse()

		then:
		actual.getStatus() == HttpStatus.NO_CONTENT.value
		actual.getContentAsString() == ""
	}
}

Dans cet article, j'ai utilisé Json Slurper et Json Builder de Groovy pour vérifier JSON. Alternativement, [Spring Boot @JsonTest](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring Vous pouvez également vérifier JSON en utilisant -boot-applications-testing-autoconfigured-json-tests).

Source utilisée dans cet article: https://github.com/kenichi-nagaoka/spock-sample/tree/feature/1

c'est tout.

référence

Recommended Posts

Écrivez rapidement un test RestController avec Spring Boot + Spock
Télécharger avec Spring Boot
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Créez une application avec Spring Boot 2
Liaison de base de données avec doma2 (Spring boot)
Écrire du code de test avec Spring Boot
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
Annotations fréquentes pour les tests Spring Boot
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
[Débutant] Essayez d'écrire l'API REST pour l'application Todo avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Spring avec Kotorin --2 RestController et Data Class
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
Essayez d'utiliser Spring Boot avec VS Code
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Traitement asynchrone avec Spring Boot en utilisant @Async
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
Écrire des tests pour les applications JavaFX avec TestFX
(IntelliJ + gradle) Hello World avec Spring Boot
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Test de validation de classe de formulaire avec Spring Boot
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Configurer l'application Spring Boot avec le module multiple maven
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot