Validez le corps de la réponse au format JSON renvoyé par RestController.
Spring Boot:2.1.1 Spock:1.2 Groovy:2.5 OS:Windows10
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>
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"
      }
    }
  ]
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);
	}
}
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.
Recommended Posts