Überprüfen Sie den von RestController zurückgegebenen JSON-formatierten Antworttext.
Spring Boot:2.1.1 Spock:1.2 Groovy:2.5 OS:Windows10
Fügen Sie die erforderlichen Bibliotheken für Spring Boot + Spock-Tests hinzu. Durch das Schreiben der Abhängigkeit von Spock-Core fallen auch die Bibliotheken um Groovy zusammen. Außerdem kann @Autowired usw. nicht in Spock (Groovy) ohne Spockfeder verwendet werden. Fügen Sie dies daher bei Bedarf hinzu.
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>
Die URL und der Antworttext des RestControllers, den Sie testen möchten, lauten wie folgt.
URL:
http://localhost:8080/employees
Response:
Status Code 200 OK
[
{
"id": "00000001",
"name": "Mitarbeiter A.",
"department": {
"id": "001",
"name": "Abteilung A."
}
},
{
"id": "00000002",
"name": "Mitarbeiter B.",
"department": {
"id": "001",
"name": "Abteilung A."
}
}
]
Ich werde die Schritte in EmployeeService # getEmployees weglassen, aber der Controller, den Sie testen möchten, lautet wie folgt.
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);
}
}
Validieren Sie mit Groovys Json Slurper und Json Builder.
//ApplicationContext wird geladen, aber keine Webumgebung usw. wird bereitgestellt
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
//Starten Sie den Server an einem zufälligen Port
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
//Die Standardeinstellung ist: Sie müssen sie nicht schreiben. Eine simulierte Webumgebung wird bereitgestellt, ohne den Server zu starten
// @AutoConfigureMockMvc oder@Kann in Kombination mit AutoConfigureWebTestClient verwendet werden
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
//Die eigentliche Webumgebung wird bereitgestellt. Der eingebettete Server wird gestartet und der konfigurierte Port (Anwendung).Hören Sie (über Eigenschaften) oder den Standardport 8080 ab
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
EmployeeControllerTest.groovy
@SpringBootTest
@AutoConfigureMockMvc
class EmployeeControllerTest extends Specification {
@SpyBean
private EmployeeService employeeService
@Autowired
MockMvc mockMvc
@Unroll
def "EmployeeController -Normales System-2 Mitarbeiter kehren zurück"() {
given:
def department = new Department("001", "Abteilung A.");
def employeeList = new ArrayList<Employee>() { {
this.add(new Employee("00000001", "Mitarbeiter A.", department));
this.add(new Employee("00000002", "Mitarbeiter 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 -Normales System-Nichts kehrt zurück"() {
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() == ""
}
}
In diesem Artikel habe ich Groovys Json Slurper und Json Builder verwendet, um JSON zu überprüfen. Alternativ Spring Boot @JsonTest Sie können JSON auch überprüfen, indem Sie -boot-application-testing-autoconfigured-json-tests verwenden.
In diesem Artikel verwendete Quelle: https://github.com/kenichi-nagaoka/spock-sample/tree/feature/1
das ist alles.
Recommended Posts