๐Ÿ™€ย ๋ฌธ์ œ์ 

์ƒํ™ฉ: @MockBean ๋Œ€์‹  mock ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์„ ๋•Œ

Spring Boot 3.4๋ถ€ํ„ฐ @MockBean์ด deprecated ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—,

ํ…Œ์ŠคํŠธ์—์„œ ์ง์ ‘ Mockito mock ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด Spring ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘€ย ํ•ด๊ฒฐ

๐Ÿงฑ ์‚ฌ์šฉ๋œ ์ฝ”๋“œ

java
๋ณต์‚ฌํŽธ์ง‘
@Autowired
private ConfigurableApplicationContext context;

private SlackNotifier slackNotifier;

@BeforeEach
void setUpMocks() {
    slackNotifier = Mockito.mock(SlackNotifier.class);

    TestPropertyValues.of("spring.main.allow-bean-definition-overriding=true")
            .applyTo(context);

    context.getBeanFactory()
            .registerSingleton("slackNotifier", slackNotifier);
}


๐Ÿงฉ ์ฝ”๋“œ ์„ค๋ช… ์š”์•ฝ

์ˆœ์„œ ์ฝ”๋“œ ์„ค๋ช…
1๏ธโƒฃ ConfigurableApplicationContext context Spring ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด (Bean ๋“ฑ๋ก ๊ฐ€๋Šฅ)
2๏ธโƒฃ Mockito.mock(SlackNotifier.class) ํ…Œ์ŠคํŠธ์šฉ ๊ฐ€์งœ ๊ฐ์ฒด(mock) ์ƒ์„ฑ
3๏ธโƒฃ allow-bean-definition-overriding=true ๊ธฐ์กด์— ๋“ฑ๋ก๋œ Bean์„ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •
4๏ธโƒฃ registerSingleton("slackNotifier", slackNotifier) Spring์—๊ฒŒ "slackNotifier"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ mock ๊ฐ์ฒด ๋“ฑ๋ก (์‹ค์ œ ์„œ๋น„์Šค ๋นˆ ๋Œ€์ฒด)

๐ŸŽฏ ์™œ ์ด๋ ‡๊ฒŒ ํ•˜๋А๋ƒ?

์ด์œ  ์„ค๋ช…
@MockBean์€ deprecated Spring Boot 3.4 ์ด์ƒ์—์„œ ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ
๋ช…์‹œ์ ์ธ Bean ๋“ฑ๋ก ํ…Œ์ŠคํŠธ์—์„œ ์–ด๋–ค mock์ด ์–ด๋–ค ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋ก๋๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
์‹ค์ œ ์„œ๋น„์Šค์šฉ Bean์„ ๊ฐ€์งœ๋กœ ๋Œ€์ฒด SlackNotifier์ฒ˜๋Ÿผ ์‹ค์ œ๋กœ ์™ธ๋ถ€ ์š”์ฒญ์ด ๋‚˜๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ…Œ์ŠคํŠธ์—์„œ ๋ง‰๊ณ  ์‹ถ์„ ๋•Œ ํ•„์š”

๐Ÿ’ก ํ•ต์‹ฌ ํฌ์ธํŠธ