Test Without @Autowire

@TestConstructor์˜ ๋™์ž‘ ์›๋ฆฌ

@TestConstructor๋Š” Spring Boot์—์„œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Spring Boot๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ @TestConstructor๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. AutowireMode์˜ ์—ญํ• 

  • @TestConstructor๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ AutowireMode๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • AutowireMode.ALL: ์ƒ์„ฑ์ž์˜ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

    • ํ…Œ์ŠคํŠธ ์ปจํ…์ŠคํŠธ์—์„œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ์Šค์บ”ํ•˜๊ณ , ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ApplicationContext์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๋ชจ๋“  Bean์ด ์ฃผ์ž… ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


How do Code?

๊ฐ™์ด ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชฉ๋ก
@RestClientTest
@Data...Test
@WebServiceClientTest
@SpringBootTest
@SpringBootTest
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
class ExampleTest {

    private final MyService myService;
    private final MyRepository myRepository;

    public ExampleTest(MyService myService, MyRepository myRepository) {
        this.myService = myService;
        this.myRepository = myRepository;
    }

    @Test
    void testService() {
        assertNotNull(myService);
        assertNotNull(myRepository);
        // MyService์™€ MyRepository๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฃผ์ž…๋จ
    }
}

๋™์ž‘ ํ๋ฆ„

  1. TestContextManager๊ฐ€ ExampleTest๋ฅผ ์ƒ์„ฑ์ž ๊ธฐ๋ฐ˜์œผ๋กœ ์ดˆ๊ธฐํ™”.

  2. SpringBootTestContextBootstrapper๊ฐ€ MyService์™€ MyRepository๋ฅผ ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๊ฒ€์ƒ‰.

  3. ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ ๊ฐ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ.

  4. ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ(testService) ์‹คํ–‰.


TIP

  1. Spring Boot 2.4 ์ด์ƒ

    • @TestConstructor๋Š” Spring Boot 2.4 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๋‹ค๋ฅธ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹๊ณผ์˜ ์ถฉ๋Œ

    • @Autowired๋ฅผ ํ†ตํ•ด ํ•„๋“œ ์ฃผ์ž…์ด๋‚˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์™€ ํ˜ผ์šฉํ•˜๋ฉด ํ˜ผ๋ž€์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์ฃผ์ž… ๋ฐฉ์‹์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  3. @TestConstructor ์—†์ด๋„ ๋™์ž‘ ๊ฐ€๋Šฅ

    • application.properties์— ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

      spring.test.constructor-autowire-mode=all

Last updated