[JAVA] Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest

Was ist @DataJpaTest?

Anmerkung zur Verwendung der automatischen Konfiguration zum Testen von Entitäten und Repositorys. Mit diesem können Sie einfach einen Test schreiben. Es hat die folgenden Funktionen. -Laden Sie die Klasse mit @Entitiy und @Repository in ApplicationContext. Klassen mit anderem @Service usw. werden nicht geladen.

Darüber hinaus ist TestEntityManager für die Bearbeitung von Testdaten in der Testklasse vorbereitet.

Einzelheiten finden Sie im offiziellen Dokument. 43.3.11 Auto-configured Data JPA Tests

Beispiel

Fügen Sie build.gradle eine Abhängigkeit hinzu, um die H2-Datenbank beim Testen mit JPA zu verwenden.

build.gradle


dependencies {

・ ・ ・
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
	testCompile('org.springframework.boot:spring-boot-starter-test')
	testCompile group: 'com.h2database', name: 'h2', version: '1.4.197'
}

Erstellen Sie als Beispiel eine Entität und ein Repository, die die Buchinformationen wie unten gezeigt verarbeiten. Das folgende Beispiel ist in Kotlin geschrieben, aber die Beschreibungsmethode ist in Java dieselbe.

@Entity
@Table(name = "book")
data class Book(

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY) //ID wird automatisch generiert
        @Column(name = "id")
        var id: Long = 0,

        @Column(name = "title")
        var title: String = "",

        @Column(name = "author")
        var author: String = "",

        @Column
        var price: Long = 0
)

Erstellen Sie das folgende Repository für die oben genannte Entität.

@Repository
interface BookRepository: JpaRepository<Book, Long> {

    //Eine Methode, die eine Liste von Büchern mit dem angegebenen Autor in aufsteigender Reihenfolge des Preises zurückgibt
    fun findAllByAuthorOrderByPrice(author: String): List<Book>
}

Erstellen Sie eine Testklasse. Mit TestEntityManager können Testdaten ohne Verwendung des Repositorys in der Datenbank gespeichert werden.

import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager
import org.springframework.test.context.junit4.SpringRunner

@RunWith(SpringRunner::class)
@DataJpaTest
class BookRepositoryTest {

    @Autowired
    private lateinit var testEntityManager: TestEntityManager

    @Autowired
    private lateinit var bookRepository: BookRepository

    @Test
    fun test() {

        //Testdatenerstellung
        testEntityManager.persist(Book(title = "title1", author = "author1", price = 102))
        testEntityManager.persist(Book(title = "title2", author = "author1", price = 101))
        testEntityManager.persist(Book(title = "title3", author = "author2", price = 104))
        testEntityManager.persist(Book(title = "title4", author = "author2", price = 103))

        val foundBooks = bookRepository.findAllByAuthorOrderByPrice("author1")

        //Es gibt zwei Bücher für author1
        assertThat(foundBooks).size().isEqualTo(2)

        //Die Suchergebnisse sind in aufsteigender Reihenfolge des Preises, also Titel2,Sollte in der Reihenfolge von Titel1 sein
        // title1
        assertThat(foundBooks[0].id).isEqualTo(2)
        assertThat(foundBooks[0].title).isEqualTo("title2")
        assertThat(foundBooks[0].author).isEqualTo("author1")
        assertThat(foundBooks[0].price).isEqualTo(101)

        // title2
        assertThat(foundBooks[1].id).isEqualTo(1)
        assertThat(foundBooks[1].title).isEqualTo("title1")
        assertThat(foundBooks[1].author).isEqualTo("author1")
        assertThat(foundBooks[1].price).isEqualTo(102)

    }
}

Recommended Posts

Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
8 Dinge, die mit Spring Boot und JPA in die DB eingefügt werden müssen
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Versuchen Sie es mit Spring Boot Security
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Hochladen und Herunterladen von Dateien mit Ajax mit Spring Boot (ohne JQuery)
Spring-Profilfunktion und Spring Boot application.properties
Stellen Sie sich die Spring Boot-App mit dem Jib-Maven-Plugin vor und starten Sie sie mit Docker
Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)
Umleitung und Komponententest mit dem Spring Flash-Zielfernrohr
Existiert mit der Spezifikation in Spring Data JPA
HTTPS mit Spring Boot und Let's Encrypt
Versuchen Sie es mit Spring Boot mit VS-Code
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Spring Boot Whitelabel-Fehlerseite und JSON-Antwort
[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot
Gegenseitige Bezugnahme auf Entity of Spring Data JPA und seine Anmerkungen
Wenden Sie Twitter Bootstrap 4 mithilfe von Webjars auf Spring Boot 2 an
Spring Boot + Spring Data JPA Informationen zu mehreren Tabellenverknüpfungen
CSRF-Gegenmaßnahmenrichtlinie und Implementierungsbeispiel in einer REST-Anwendung unter Verwendung von "Spring Boot" + "EXT JS"
Überprüfen Sie das Verhalten von getOne-, findById- und Abfragemethoden mit Spring Boot + Spring Data JPA