No momento, estou aprendendo Kotlin e decidi fazer alguns testes para ver se meu progresso funciona até agora, mas estou encontrando um erro ao executar meu teste. Nenhuma das soluções que encontrei na internet abordou meu problema específico com sucesso.
Criei o projeto com o spring initializer, usando o IntelliJ IDEA.
A classe de dados:
package com.refactorizando.RealState.model
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
@Entity
data class House(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "houseId")
val houseId : Long?=null,
@Column(name = "height")
val height : Long,
@Column(name = "length")
val length : Long,
@Column(name = "neighbourhood")
val neighbourhood : String,
@Column(name = "price")
val price : Long
)
package com.refactorizando.RealState.repository
import com.refactorizando.RealState.model.House
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
@Repository
interface HouseRepository : JpaRepository<House,Long> {
}
O teste:
package com.refactorizando.RealState.repository
import com.refactorizando.RealState.model.House
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertNotNull
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
@DataJpaTest
class HouseRepositoryTest{
@Autowired
lateinit var houseRepository: HouseRepository
lateinit var house : House
@BeforeEach
fun init(){
house = House(height = 1, length = 1, neighbourhood = "Somewhere", price = 10000)
}
@Test
fun shouldSave(){
val savedHouse = houseRepository.save(house)
assertNotNull(savedHouse)
}
}
E continuo recebendo o mesmo erro abaixo:
Failed to load ApplicationContext for [MergedContextConfiguration@777d191f testClass = com.refactorizando.RealState.repository.HouseRepositoryTest, locations = [], classes = [com.refactorizando.RealState.RealStateApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@c260bdc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@3f363cf5, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@34be3d80, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@cc5747f7, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@7b64240d, [ImportsContextCustomizer@7fc420b8 key = [org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcClientAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5049d8b2, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2a3591c5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@76ba13c, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@d6b877fa], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@777d191f testClass = com.refactorizando.RealState.repository.HouseRepositoryTest, locations = [], classes = [com.refactorizando.RealState.RealStateApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@c260bdc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@3f363cf5, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@34be3d80, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@cc5747f7, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@7b64240d, [ImportsContextCustomizer@7fc420b8 key = [org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcClientAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5049d8b2, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2a3591c5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@76ba13c, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@d6b877fa], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:155)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:160)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:636)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testEntityManager' defined in class path resource [org/springframework/boot/test/autoconfigure/orm/jpa/TestEntityManagerAutoConfiguration.class]: Unsatisfied dependency expressed through method 'testEntityManager' parameter 0: No qualifying bean of type 'jakarta.persistence.EntityManagerFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver
.createArgumentArray(ConstructorResolver.java : 804) at org.springframework
.beans.factory.support.ConstructorResolver
.instantiateUsingFactoryMethod(ConstructorResolver.java : 546) at org
.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.instantiateUsingFactoryMethod(
AbstractAutowireCapableBeanFactory.java : 1361) at org.springframework
.beans.factory.support.AbstractAutowireCapableBeanFactory
.createBeanInstance(AbstractAutowireCapableBeanFactory.java : 1191) at org
.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.doCreateBean(AbstractAutowireCapableBeanFactory.java : 563) at org
.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.createBean(AbstractAutowireCapableBeanFactory.java : 523) at org
.springframework.beans.factory.support.AbstractBeanFactory
.lambda$doGetBean$0(AbstractBeanFactory.java : 339) at org.springframework
.beans.factory.support.DefaultSingletonBeanRegistry
.getSingleton(DefaultSingletonBeanRegistry.java : 347) at org
.springframework.beans.factory.support.AbstractBeanFactory
.doGetBean(
AbstractBeanFactory.java : 337) at org.springframework.beans.factory
.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java : 202) at org
.springframework.beans.factory.support.DefaultListableBeanFactory
.instantiateSingleton(DefaultListableBeanFactory.java : 1155) at org
.springframework.beans.factory.support.DefaultListableBeanFactory
.preInstantiateSingleton(DefaultListableBeanFactory.java : 1121) at org
.springframework.beans.factory.support.DefaultListableBeanFactory
.preInstantiateSingletons(DefaultListableBeanFactory.java : 1056) at org
.springframework.context.support.AbstractApplicationContext
.finishBeanFactoryInitialization(AbstractApplicationContext.java : 987)
at org.springframework.context.support.AbstractApplicationContext
.refresh(AbstractApplicationContext.java : 627) at org.springframework.boot
.SpringApplication.refresh(SpringApplication.java : 752) at org
.springframework.boot.SpringApplication
.refreshContext(SpringApplication.java : 439) at org.springframework.boot
.SpringApplication.run(SpringApplication.java : 318) at org.springframework
.boot.test.context.SpringBootContextLoader
.lambda$loadContext$3(SpringBootContextLoader.java : 144) at org
.springframework.util.function.ThrowingSupplier
.get(ThrowingSupplier.java : 58) at org.springframework.util.function
.ThrowingSupplier.get(ThrowingSupplier.java : 46) at org.springframework
.boot.SpringApplication.withHook(SpringApplication.java : 1461) at org
.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook
.run(SpringBootContextLoader.java : 563) at org.springframework.boot.test
.context.SpringBootContextLoader
.loadContext(SpringBootContextLoader.java : 144) at org.springframework.boot
.test.context.SpringBootContextLoader
.loadContext(SpringBootContextLoader.java : 110) at org.springframework.test
.context.cache.DefaultCacheAwareContextLoaderDelegate
.loadContextInternal(
DefaultCacheAwareContextLoaderDelegate.java : 225) at org
.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate
.loadContext(
DefaultCacheAwareContextLoaderDelegate.java : 152)... 19 more Caused by
: org.springframework.beans.factory
.NoSuchBeanDefinitionException
: No qualifying bean of type
'jakarta.persistence.EntityManagerFactory' available
: expected at least
1 bean which qualifies as autowire candidate.Dependency annotations : {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory
.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java : 2207) at org
.springframework.beans.factory.support.DefaultListableBeanFactory
.doResolveDependency(DefaultListableBeanFactory.java : 1630) at org
.springframework.beans.factory.support.DefaultListableBeanFactory
.resolveDependency(DefaultListableBeanFactory.java : 1555) at org
.springframework.beans.factory.support.ConstructorResolver
.resolveAutowiredArgument(ConstructorResolver.java : 913) at org
.springframework.beans.factory.support.ConstructorResolver
.createArgumentArray(ConstructorResolver.java : 791)... 45 more
Error creating bean with name 'testEntityManager' defined in
class path resource[org / springframework / boot / test / autoconfigure /
orm / jpa / TestEntityManagerAutoConfiguration.class]
: Unsatisfied dependency expressed through method
'testEntityManager' parameter 0
: No qualifying bean of type
'jakarta.persistence.EntityManagerFactory' available
: expected at least
1 bean which qualifies as autowire candidate.Dependency annotations : {}
org.springframework.beans.factory
.UnsatisfiedDependencyException
: Error creating bean with name 'testEntityManager' defined in class path
resource[org / springframework / boot / test / autoconfigure / orm /
jpa / TestEntityManagerAutoConfiguration.class]
: Unsatisfied dependency expressed through
method 'testEntityManager' parameter 0
: No qualifying bean of
type 'jakarta.persistence.EntityManagerFactory' available
: expected at least 1 bean which qualifies
as autowire candidate.Dependency annotations : {}
at app // org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
at app // org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
at app // org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1361)
at app // org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191)
at app // org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)
at app // org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
at app // org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
at app // org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:347)
at app // org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
at app // org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at app // org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1155)
at app // org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1121)
at app // org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1056)
at app // org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987)
at app // org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
at app // org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
at app // org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
at
app // org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
at
app // org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144)
at
app // org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at
app // org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at
app // org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1461)
at
app // org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563)
at
app // org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144)
at
app // org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110)
at
app // org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)
at
app // org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)
at
app // org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
at app // org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:155)
at app // org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
at app // org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at app // org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:160)
at java
.base
@23.0.2 /
java.util.stream.ForEachOps$ForEachOp$OfRef
.accept(ForEachOps.java : 184) at java.base @23.0.2 /
java.util.stream.ReferencePipeline$3$1
.accept(ReferencePipeline.java : 215) at java.base @23.0.2 /
java.util.stream.ReferencePipeline$2$1
.accept(ReferencePipeline.java : 197) at java.base @23.0.2 /
java.util.stream.ReferencePipeline$3$1
.accept(ReferencePipeline.java : 215) at java.base @23.0.2 /
java.util.ArrayList$ArrayListSpliterator
.forEachRemaining(ArrayList.java : 1709) at java.base @23.0.2 /
java.util.stream.AbstractPipeline
.copyInto(AbstractPipeline.java : 570) at java.base @23.0.2 /
java.util.stream.AbstractPipeline
.wrapAndCopyInto(AbstractPipeline.java : 560) at java.base @23.0.2 /
java.util.stream.ForEachOps$ForEachOp
.evaluateSequential(ForEachOps.java : 151) at java.base @23.0.2 /
java.util.stream.ForEachOps$ForEachOp$OfRef
.evaluateSequential(ForEachOps.java : 174) at java.base @23.0.2 /
java.util.stream.AbstractPipeline
.evaluate(AbstractPipeline.java : 265) at java.base @23.0.2 /
java.util.stream.ReferencePipeline
.forEach(ReferencePipeline.java : 636) at java.base @23.0.2 /
java.util.Optional.orElseGet(Optional.java : 364) at java.base @23.0.2 /
java.util.ArrayList.forEach(ArrayList.java : 1597) at java.base @23.0.2 /
java.util.ArrayList.forEach(ArrayList.java : 1597) Caused by
: org.springframework.beans.factory
.NoSuchBeanDefinitionException
: No qualifying bean of type
'jakarta.persistence.EntityManagerFactory' available
: expected at least
1 bean which qualifies as autowire candidate.Dependency annotations : {}
at app // org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:2207)
at app // org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1630)
at app // org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1555)
at app // org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
at app // org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 45 more
Aqui está o repositório do código .
Sei que não estou fornecendo muitas informações, mas a verdade é que não sei mais o que dizer. Tentei diferentes soluções postadas online e nenhuma parece resolver esse problema.
A exceção é lançada porque você não tem
EntityManagerFactory
um bean no seu contêiner spring.Para evitar criá-lo manualmente, você pode adicionar a seguinte dependência:
spring-boot-starter-data-jpa
cria beans com base em seusapplication.yaml
que são necessários para trabalhar com persistência