1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.

1 - 1. @Mock


@ExtendWith(MockitoExtension.class)
class ProductServiceTest{

    @Mock
    private ProductRepository productRepository;

@Test
void testMock() {
    when(productRepository.findAll()).thenReturn(Collections.emptyList());
    // 이 테스트에서 productRepository는 가짜 객체로 동작
}

1 - 2. @MockBean

@SpringBootTest
class ProductServiceTest{

@MockBean
private ProductRepository productRepository;

@Autowired
private ProductService productService;

@Test
void testMockBean() {
    when(productRepository.findAll()).thenReturn(Collections.emptyList());
    // productRepository는 Spring Bean으로 등록되어 있지만 가짜로 대체됨
}

1 - 3. @Spy