해결된 질문
작성
·
187
·
수정됨
0
테스트 코드 실행시 의존성 주입이 안되는 듯한 에러가 있습니다...
org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [com.mkim.portfolio.domain.repository.ExperienceRepository experienceRepository] in constructor [public com.mkim.portfolio.domain.repository.ExperienceRepositoryTest(com.mkim.portfolio.domain.repository.ExperienceRepository)]: Failed to load ApplicationContext for [MergedContextConfiguration@41120e48 testClass = com.mkim.portfolio.domain.repository.ExperienceRepositoryTest, locations = [], classes = [com.mkim.portfolio.PortfolioApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@15bb5034, 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@854e4b26, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@7a35b0f5, [ImportsContextCustomizer@165a5979 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@7bd7d6d6, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2a8448fa, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@4d8dfd98], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
@Autowired
도 잘 넣은듯한데 왜 해당 에러가 발생하는지를 파악을 못하고 있습니다...
test를 하려하는 타겟 레포지토리도 하위 경로에 잘 존재합니다.
interface ExperienceRepository : JpaRepository<Experience, Long> {
fun findAllByIsActive(isActive: Boolean): List<Experience>
}
현재 플러그인과 디펜던시는 아래와 같습니다.
plugins {
id("org.springframework.boot") version "3.3.0"
id("io.spring.dependency-management") version "1.1.5"
kotlin("plugin.jpa") version "1.9.24"
kotlin("jvm") version "1.9.24"
kotlin("plugin.spring") version "1.9.24"
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
runtimeOnly("com.h2database:h2")
runtimeOnly("com.mysql:mysql-connector-j")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
제가 확인해야할 부분을 잘 못찾고 있는듯합니다... 혹시 제가 놓치는 부분이 있을까요?
답변 2
0
의존성 주입이, 제가 레포지토리 작성시 레포지토리 내의 함수명을 유의깊게 확인하지 않고 타겟 엔티티의 변수와 일치하지 않는 이름을 사용하여, 해당 레포지토리가 생성되지 않고, 테스트 레벨에서는 해당 레포지토리가 없다는 에러로 내 뱉었습니다...
도움을 주셔서 감사합니다.
답변 남겨주신 내용도 참고하여 혹시 몰라 강의에서 사용하지 않는 디펜던시는 모두 제거 하였습니다 :)
0
안녕하세요 정보근입니다:)
현재 올려주신 자료만으로는 정확한 원인을 파악하기는 어렵네요.
출력된 예외를 보면 DataJpaTest 관련 설정에서 오류가 있는 것으로 보이긴 합니다.
ParameterResolutionException이 junit에서 던지는 예외인 걸 볼 때 디버깅 시작해볼 수 있는 지점은
org.jetbrains.kotlin:kotlin-test-junit5와 org.junit.platform:junit-platform-launcher입니다.
제가 강의에서 사용하지 않은 디펜던시인데 어떤 이유로 추가하셨는진 모르겠지만
총 3개의 테스트 관련 라이브러리가 사용되면서 버전 관련 문제가 발생한 건 아닐까 의심되네요.
2개 디펜던시 제거 후 Gradle 새로고침 후 재시도 해보셔도 좋을 것 같습니다.
보다 정확한 원인 파악이 필요하시면 깃허브 리포지토리 공유해주시면 함께 봐보겠습니다.
감사합니다.