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
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