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
                }
            }
        }
    }
}

 

 

๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ŠคํŠธ ์„ฑ๊ณต!

728x90

BELATED ARTICLES

more