๐จ ์๋ฌ
[Spring/Test Code] Unnecessary stubbings detected, UnnecessaryStubbingException
kekeyo
2025. 6. 19. 21:18
728x90
๋ฌธ์
@ParameterizedTest
@MethodSource("invalidCreatePostArgs")
void createPost_์์ธ(
Long userId,
Long problemNumber,
List<String> categories,
Class<? extends RuntimeException> expectedException,
ErrorMessage errorMessage) {
PostCreateEditRequestDto requestDto = PostFixture.requestDto(problemNumber, categories, PostFixture.TEST_TITLE, PostFixture.TEST_CONTENT);
// ์กด์ฌํ์ง ์๋ ์ฌ์ฉ์ ID๋ผ๋ฉด empty
given(userRepository.findById(userId)).willReturn(
userId.equals(VALID_USER_ID) ? Optional.of(user) : Optional.empty()
);
// ์กด์ฌํ์ง ์๋ ๋ฌธ์ ๋ฒํธ๋ผ๋ฉด empty
given(problemRepository.findByNumber(problemNumber)).willReturn(
problemNumber.equals(VALID_PROBLEM_NUMBER) ? Optional.of(problem) : Optional.empty()
);
given(categoryRepository.findByNameIn(categories)).willReturn(List.of(category));
assertThatThrownBy(() -> postService.createPost(userId, requestDto))
.isInstanceOf(expectedException)
.hasMessage(errorMessage.getMessage());
}
static Stream<Arguments> invalidCreatePostArgs() {
return Stream.of(
// ์กด์ฌํ์ง ์๋ ์ฌ์ฉ์
Arguments.of(INVALID_USER_ID, VALID_PROBLEM_NUMBER, VALID_CATEGORIES, ForbiddenException.class, ErrorMessage.USER_NOT_FOUND),
// ์กด์ฌํ์ง ์๋ ๋ฌธ์ ๋ฒํธ
Arguments.of(VALID_USER_ID, INVALID_PROBLEM_NUMBER, VALID_CATEGORIES, BadRequestException.class, ErrorMessage.INVALID_PROBLEM_INCLUDED),
// ์กด์ฌํ์ง ์๋ ์นดํ
๊ณ ๋ฆฌ
Arguments.of(VALID_USER_ID, VALID_PROBLEM_NUMBER, INVALID_CATEGORIES, BadRequestException.class, ErrorMessage.INVALID_CATEGORY_INCLUDED)
);
}
์๋ฌ๋ฉ์ธ์ง
nnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
1. -> at icet.koco.post.PostServiceTest$createPostTest.createPost_์์ธ(PostServiceTest.java:154)
2. -> at icet.koco.post.PostServiceTest$createPostTest.createPost_์์ธ(PostServiceTest.java:158)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
์์ธ
์กด์ฌํ์ง ์๋ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ given ๋ error๊ฐ ๋ฐ์ํ๋ฉด์ ๋ฌธ์ ๋ฒํธ, ์นดํ ๊ณ ๋ฆฌ ๊ด๋ จ stub๊ฐ ์ฌ์ฉ๋์ง ์๋๋ค.
// userId๊ฐ INVALID_USER_ID์ธ ๊ฒฝ์ฐ
given(userRepository.findById(userId)) // โ ์ฌ๊ธฐ์ Optional.empty() ๋ฐํ โ ์์ธ ๋ฐ์
// ์๋ ๋ given์ ์คํ๋์ง ์์
given(problemRepository.findByNumber(problemNumber))
given(categoryRepository.findByNameIn(categories))
์ด๋ฌํ ๊ฒฝ์ฐ์ Mockito Core 3.x ๋ฒ์ ์ ์ฌ์ฉํ ๋ ์์ ๊ฐ์ด UnnecessaryStubbingException ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ
ํ ์คํธ ํด๋์ค์ ๋ค์ ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ Mockito์ strict ๋ชจ๋๋ฅผ ์ํํด์ฃผ์๋ค.
@MockitoSettings(strictness = Strictness.LENIENT)
728x90