Annotation pour l'utilisation de la configuration automatique pour tester les entités et les référentiels. Vous pouvez facilement écrire un test en utilisant ceci. Il présente les caractéristiques suivantes. -Chargez la classe avec @Entitiy et @Repository dans ApplicationContext. Les classes avec d'autres @Service etc. ne sont pas chargées. -Roll back la transaction pour chaque test (@Test). Le contrôle des transactions peut être modifié. -Utiliser la base de données en mémoire dans le test
De plus, TestEntityManager est préparé pour manipuler les données de test dans la classe de test.
Voir le document officiel pour plus de détails. 43.3.11 Auto-configured Data JPA Tests
Ajoutez une dépendance à build.gradle pour utiliser la base de données H2 lors des tests avec JPA.
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'
}
À titre d'exemple, créez une entité et un référentiel qui gèrent les informations du livre comme indiqué ci-dessous. L'exemple suivant est écrit en Kotlin, mais la méthode de description est la même en Java.
@Entity
@Table(name = "book")
data class Book(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //L'ID est généré automatiquement
@Column(name = "id")
var id: Long = 0,
@Column(name = "title")
var title: String = "",
@Column(name = "author")
var author: String = "",
@Column
var price: Long = 0
)
Créez le référentiel suivant pour l'entité ci-dessus.
@Repository
interface BookRepository: JpaRepository<Book, Long> {
//Une méthode qui renvoie une liste de livres avec l'auteur spécifié dans l'ordre croissant de prix
fun findAllByAuthorOrderByPrice(author: String): List<Book>
}
Créez une classe de test. En utilisant TestEntityManager, les données de test peuvent être stockées dans la base de données sans utiliser le référentiel.
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() {
//Création de données de test
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")
//Il y a deux livres pour l'auteur1
assertThat(foundBooks).size().isEqualTo(2)
//Les résultats de la recherche sont classés par ordre croissant de prix, donc title2,Doit être dans l'ordre du titre1
// 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