[JAVA] Schreiben Sie schnell RestController-Tests mit Spring Boot + Spock

Inhalt testen

Überprüfen Sie den von RestController zurückgegebenen JSON-formatierten Antworttext.

Umgebung

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

Vorbereitung

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>

RestController-URL und Antworttext, die Sie testen möchten

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."
      }
    }
  ]

Controller-Klasse, die Sie testen möchten

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);
	}
}

Testklasse

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.

Referenz

Recommended Posts

Schreiben Sie schnell RestController-Tests mit Spring Boot + Spock
Mit Spring Boot herunterladen
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Erstellen Sie eine App mit Spring Boot 2
Datenbankverknüpfung mit doma2 (Spring Boot)
Schreiben Sie den Testcode mit Spring Boot
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
Häufige Anmerkungen für Spring Boot-Tests
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
[Anfänger] Versuchen Sie, die REST-API für die Todo-App mit Spring Boot zu schreiben
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Feder mit Kotorin --2 RestController und Datenklasse
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
Versuchen Sie es mit Spring Boot mit VS-Code
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
Schreiben Sie Tests für JavaFX-Anwendungen mit TestFX
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Formularklassenvalidierungstest mit Spring Boot
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot