테스트 주도 개발(Test-Driven Development, TDD)은 소프트웨어 개발 방법론 중 하나로, 소프트웨어 개발 과정에서 코드를 작성하기 전에 테스트를 먼저 작성하는 방식을 말합니다. 이 방법론은 "테스트가 모든 개발의 중심"이라는 철학을 바탕으로 합니다.
테스트 우선: TDD에서는 테스트가 개발의 출발점입니다. 먼저 원하는 기능의 테스트를 작성하고, 이후에 해당 기능을 구현합니다. 이렇게 하면 개발자는 자신이 작성한 코드가 요구 사항을 충족하는지 즉시 확인할 수 있습니다.
작은 단계로 개발: TDD는 기능을 작은 단위로 나누어 개발하는 것을 강조합니다. 이는 테스트를 쉽게 작성하고 유지 보수하기 위함입니다.
@MockBean과 @SpyBean은 둘 다 Spring Boot 테스트에서 빈의 동작을 제어하는 데 사용되는 어노테이션이지만, 사용하는 목적과 방식에 차이가 있습니다.
@MockBean은 Spring Boot의 테스트 컨텍스트에서 모의 객체(mock object)를 생성하고 주입하는 데 사용됩니다.@MockBean은 Mockito를 사용하여 빈의 동작을 모의(mock)합니다.@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {
@MockBean
private MyDependency myDependency; // MyDependency를 모의 객체로 주입
@Autowired
private MyService myService;
@Test
public void testServiceMethod() {
// myDependency의 메서드 호출을 모의하여 원하는 값을 반환하도록 설정
Mockito.when(myDependency.someMethod()).thenReturn("Mocked Value");
// myService의 메서드 테스트
String result = myService.serviceMethod();
assertEquals("Expected Result", result);
}
}
@SpyBean은 Spring Boot 테스트에서 실제 빈을 부분적으로 모니터링하고, 특정 메서드만 모의(mock)하거나 검증하는 데 사용됩니다. Mockito의 스파이(spy) 기능을 활용하여 빈의 동작을 조정할 수 있습니다.
@SpyBean은 Spring Boot의 테스트 컨텍스트에서 실제 빈을 스파이(spy) 객체로 주입합니다.@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {
@SpyBean
private MyService myService; // MyService의 실제 빈을 스파이 객체로 주입
@Autowired
private MyDependency myDependency;
@Test
public void testServiceMethod() {
// myService의 실제 동작을 유지하면서 특정 메서드만 스파이
Mockito.doReturn("Mocked Value").when(myService).someMethod();
// myService의 메서드 테스트
String result = myService.serviceMethod();
assertEquals("Expected Result", result);
// 호출된 메서드 검증
Mockito.verify(myService).someMethod();
}
}