ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ค ์คํ์ ํ๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค.
No ParameterResolver registered for parameter [repository.SolutionWriteRepository arg0] in constructor [public SolutionRepositoryTest(repository.SolutionWriteRepository,repository.EducatorWriteRepository,repository.LearnerWriteRepository)].
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [repository.SolutionWriteRepository arg0] in constructor [public SolutionRepositoryTest(repository.SolutionWriteRepository,repository.EducatorWriteRepository,repository.LearnerWriteRepository)]
ํด๋น ์ฝ๋๋ ์๋์ ๊ฐ์๋๋ฐ, ๊ฒฐ๋ก ์ ์ผ๋ก๋ ์ฃผ ์์ฑ์์ @Autowired ์ด๋ ธํ ์ด์ ์ ๋ช ์ํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
@DataJpaTest
open class SolutionRepositoryTest constructor(
private val solutionWriteRepository: SolutionWriteRepository,
private val educatorWriteRepository: EducatorWriteRepository,
private val learnerWriteRepository: LearnerWriteRepository
) {...}
JUnit์์ ํ ์คํธ ํด๋์ค์ ํ์ํ ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์คํ๋ง ์ปจํ ์คํธ ๋ก๋ฉ
- ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ๋ ๋น์ ๊ด๋ฆฌํ๋๋ฐ, JUnit ํ
์คํธ์์ ์ด๋ฅผ ๋ก๋ํ๊ธฐ ์ํด @SpringBootTest์ ๊ฐ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๊ฒ ๋๋ค.
(์์ ์ฝ๋์ ๊ฒฝ์ฐ @DataJpaTest ์ฌ์ฉ)
- ์์กด์ฑ ์ฃผ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์์ ๊ด๋ฆฌํ๋ ๋น ์ค ํ ์คํธ ํด๋์ค์์ ํ์ํ ๋น์ ์์กด์ฑ ์ฃผ์ ์ ํตํด ํ ์คํธ ํด๋์ค์ ์ ๊ณตํ๋ค. @Autowired๋ @MockBean๊ณผ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ๋ช ์ํจ์ผ๋ก์จ ์์กด์ฑ ์ฃผ์ ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ Controller์ ๊ฐ์ด ํ์ํ ๋น์ด ์ฌ๋ฟ ์๋ ํด๋์ค์์๋ ์ฃผ ์์ฑ์์ @Autowired ์ด๋ ธํ ์ด์ ์ ๋ช ์ํ์ง ์์๋ ์ ์์ ์ผ๋ก ์์กด์ฑ ์ฃผ์ ์ด ๋์๋๋ฐ, ํ ์คํธ ํด๋์ค์์๋ ์ ๋๋ ์ด์ ๊ฐ ๊ถ๊ธํด์ก๋ค.
์ฝํ๋ฆฐ์์๋ ์คํ๋ง ๋น์ ์ฃผ์ ํ ๋ ํด๋์ค์ ์ฃผ ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ์ ์ ์ธํ๋ฉด ์คํ๋ง์ด ์ด๋ฅผ ๊ฐ์งํ์ฌ ์๋์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ @Autowired๋ฅผ ์๋ตํ ์ ์๋ค.
JUnit Jupiter creates a new instance of the test class for each test method, so test methods can be executed in parallel. Consequently, test classes should not have instance fields that are shared across test methods.
ํ์ง๋ง JUnit 5 ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด JUnit์ ํ ์คํธ ๋ฉ์๋์ ๊ณต์ ์ํ๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ์ํ ๋ ๋ฆฝ์ ์คํ์ ๋ณด์ฅํ๋ค๋ณด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ์ธ์คํด์ค๋ฅผ ๋ฉ์๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ด ์๋ ์ฃผ ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
์ ์๋ํ ๋ @Autowired๋ฅผ ๋ช
์ํ์ง ์์ ๊ฒฝ์ฐ JUnit ํ
์คํธ ํด๋์ค์ ์ ์์ ์ผ๋ก ์ ์ฉ๋์ง ์์ ์ ์๋ค๊ณ ํ๋ค.
ํ ์คํธ ํด๋์ค์ ์ฃผ ์์ฑ์์ @Autowired๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
@DataJpaTest
open class SolutionRepositoryTest @Autowired constructor(
private val solutionWriteRepository: SolutionWriteRepository,
private val educatorWriteRepository: EducatorWriteRepository,
private val learnerWriteRepository: LearnerWriteRepository
) {...}