[Kotlin+SpringBoot] Kotest ์ฌ์ฉ ์ @Autowired ์ค๋ฅ
Kotlin์ผ๋ก ํ๋ก์ ํธ ์งํ ์ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋์๋ค.
@DataJpaTest
class MemberRepositoryTest @Autowired constructor(private val memberRepository: MemberRepository) : BehaviorSpec() {
init {
given("Member Entity ์์ฑ") {
val member = Member("123456", "ํ
์คํธ ๋๋ค์")
`when`("์์ฑํ Member Entity๋ฅผ ์ ์ฅ") {
val savedMember = memberRepository.save(member)
then("Entity ์ ์ฅ ์ฑ๊ณต") {
savedMember.kakaoId shouldBe member.kakaoId
savedMember.nickname shouldBe member.nickname
}
}
}
}
}
@DataJpaTest
class MemberRepositoryTest : BehaviorSpec() {
@Autowired
private lateinit val memberRepository: MemberRepository
init {
given("Member Entity ์์ฑ") {
val member = Member("123456", "ํ
์คํธ ๋๋ค์")
`when`("์์ฑํ Member Entity๋ฅผ ์ ์ฅ") {
val savedMember = memberRepository.save(member)
then("Entity ์ ์ฅ ์ฑ๊ณต") {
savedMember.kakaoId shouldBe member.kakaoId
savedMember.nickname shouldBe member.nickname
}
}
}
}
}
...
Kotest๋ผ๋ ํ ์คํธ ๋๊ตฌ๋ฅผ ์๊ฒ ๋์๊ณ , ๋จ์ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ํด ํ์ํ ๋น์ ์ฃผ์ ๋ฐ์ผ๋ ค๊ณ ๋ค์ํ ๋ฐฉ๋ฒ์ ์๋ํ์ง๋ง
kotlin.UninitializedPropertyAccessException: lateinit property memberRepository has not been initialized
io.kotest.engine.spec.SpecInstantiationException: Could not create instance of class com.uplus.zip.domain.member.dao.MemberRepositoryTest. Specs must have a public zero-arg constructor.
๋ค์ํ ์ค๋ฅ๋ฅผ ๋ง์ฃผํ๊ฒ ๋์๋ค...
๊ตฌ๊ธ๋งํด๋ ํด๊ฒฐ๋ฒ์ด ์ ์๋์๊ณ ๊ฒฐ๊ตญ ๊ณต์๋ฌธ์๋ฅผ ํตํด ๋น ์ฃผ์ ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ ๋์๋ค...
https://kotest.io/docs/extensions/spring.html
Spring | Kotest
Kotest offers a Spring extension that allows you to test code that uses the Spring framework for dependency injection.
kotest.io
๋จผ์ build.gradle์ ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
kotest-runner์ ๋ฒ์ ์ด ๋ค๋ฅด๋ ์ฃผ์ํ์
testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.2")
๊ทธ๋ฆฌ๊ณ override fun extensions() = listOf(SpringExtension) ์ ์์ฑํ๊ณ
์ํ๋ ๋น์ lateinit ๋ฐฉ์์ผ๋ก ์ฃผ์ ๋ฐ์ผ๋ฉด ๋๋ค.
@DataJpaTest
class MemberRepositoryTest: BehaviorSpec() {
override fun extensions() = listOf(SpringExtension)
@Autowired
private lateinit var memberRepository: MemberRepository
init {
given("Member Entity ์์ฑ") {
val member = Member("123456", "ํ
์คํธ ๋๋ค์")
`when`("์์ฑํ Member Entity๋ฅผ ์ ์ฅ") {
val savedMember = memberRepository.save(member)
then("Entity ์ ์ฅ ์ฑ๊ณต") {
savedMember.kakaoId shouldBe member.kakaoId
savedMember.nickname shouldBe member.nickname
}
}
}
}
}
๊ทธ๋ฌ๋ฉด ํ ์คํธ ์ฑ๊ณต!
'Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot] Spring Rest Docs ์ ์ฉ (gradle 7๋ฒ์ ) (3) | 2022.09.20 |
---|---|
[Servlet/JSP] ์ดํด๋ฆฝ์ค Dynamic Web Project ์์ฑ ๋ฐ ๊ตฌ์กฐ ํ์ธ (0) | 2022.03.25 |
Web Architecture์ ๋ํ ์ดํด (0) | 2022.03.25 |