인프런 커뮤니티 질문&답변

D Kim님의 프로필 이미지

작성한 질문수

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

[실습] 리포지토리 테스트 코드 작성

org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter

24.07.26 17:31 작성

·

102

·

수정됨

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]
image.png

@Autowired 도 잘 넣은듯한데 왜 해당 에러가 발생하는지를 파악을 못하고 있습니다...

test를 하려하는 타겟 레포지토리도 하위 경로에 잘 존재합니다.

image.png
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

D Kim님의 프로필 이미지
D Kim
질문자

2024. 08. 22. 22:24

의존성 주입이, 제가 레포지토리 작성시 레포지토리 내의 함수명을 유의깊게 확인하지 않고 타겟 엔티티의 변수와 일치하지 않는 이름을 사용하여, 해당 레포지토리가 생성되지 않고, 테스트 레벨에서는 해당 레포지토리가 없다는 에러로 내 뱉었습니다...

도움을 주셔서 감사합니다.

답변 남겨주신 내용도 참고하여 혹시 몰라 강의에서 사용하지 않는 디펜던시는 모두 제거 하였습니다 :)

0

정보근님의 프로필 이미지
정보근
지식공유자

2024. 07. 28. 16:48

안녕하세요 정보근입니다:)

 

현재 올려주신 자료만으로는 정확한 원인을 파악하기는 어렵네요.

 

출력된 예외를 보면 DataJpaTest 관련 설정에서 오류가 있는 것으로 보이긴 합니다.

 

ParameterResolutionException이 junit에서 던지는 예외인 걸 볼 때 디버깅 시작해볼 수 있는 지점은

 

org.jetbrains.kotlin:kotlin-test-junit5와 org.junit.platform:junit-platform-launcher입니다.

 

제가 강의에서 사용하지 않은 디펜던시인데 어떤 이유로 추가하셨는진 모르겠지만

 

총 3개의 테스트 관련 라이브러리가 사용되면서 버전 관련 문제가 발생한 건 아닐까 의심되네요.

 

2개 디펜던시 제거 후 Gradle 새로고침 후 재시도 해보셔도 좋을 것 같습니다.

 

보다 정확한 원인 파악이 필요하시면 깃허브 리포지토리 공유해주시면 함께 봐보겠습니다.

 

감사합니다.

D Kim님의 프로필 이미지

작성한 질문수

질문하기